The compiler will not fight you when you explicitly tell it somewhere to pass a link to an uninitialized object. In the end, the function you pass in can be used to actually initialize the object.
However, access to uninitialized data, for example your this->i++; , leads to undefined behavior.
source share