"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

Reply via email to