"Philippe A. Bouchard" <[EMAIL PROTECTED]> writes: > David Abrahams wrote: > > [...] > >>> What will happen to a normal type then? >> >> What is a "normal type"? > > Any type besides optional<T>. > >>> { >>> T storage = T(x, y, z); // throws >>> >>> // storage.~T() destroys non-existent T >> >> Storage never gets constructed if T(x,y,z) throws, so it is also >> never destroyed. > > It is never destroyed, because the program counter returns from the function > before it reaches the object's destruction?
And more-importantly, before it reaches the object's construction. > If so, the same will happen to aligned_storage<T>::type if it trows > an exception? Once again, the case was: { aligned_storage<T>::type storage; new ((void*)&storage) T(x, y, z); // throws // ~aligned_storage<T>() destroys non-existent T } The question is not what happens if aligned_storage<T>::type throws. It will never throw, since it is POD. The question is what happens if T throws. If, as you say, you don't know much about EH, please do a little bit of research about how it works before you argue with me on this one :-) -- Dave Abrahams Boost Consulting www.boost-consulting.com _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost