On 05-Oct-2015 10:40, deadalnix wrote:
In C++ you can't - not only self-references are permitted but also
there is no T.init so there is no bit-pattern that is guaranteed to
not explode in dtor.


Guaranteed construct/destruction is actually a desirable feature IMO.
You get all kind of extra case int he dtor to care for when you can't
ensure proper construction, and it is not always possible to have a
meaningful .init value, leading to many useless runtime checks or an
invalid dtor.


Yes and no, if your type is movable in C++ you have to have a T.init equivalent to leave something behind after move (oops!).

Now if the type is not movable it doesn't really burden much to have an invalid state and trigger an assert in dtor to make sure the type is properly initialized. Then:

T a; // would trigger assert on dtor
T a = T(...); // shouldn't

If all states are valid and you still want to guarantee construction that gets tricky. For example for "seconds" struct if we allow negative seconds as in diff of time. (Though I'd just use long.min for the "wrong" flag in this case).

--
Dmitry Olshansky

Reply via email to