Boost logo

Boost :

From: Peter Dimov (pdimov_at_[hidden])
Date: 2003-02-20 07:13:35


Itay Maman wrote:
> "David B. Held" <dheld_at_[hidden]> wrote in message
> news:b2ug4i$a8q$1_at_main.gmane.org...
>> "Eric Friedman" <ebf_at_[hidden]> wrote in message
>> news:b2uflv$86s$1_at_main.gmane.org...
>>> [...]
>>> const T& r = ...;
>>> r.~T();
>>>
>>> Even if my understanding is correct though, it may be best for
>>> destroyer to take a non-const reference to avoid confusion.
>>
>> Comeau says it's ok, so I'd just leave it as is. It does seem
>> peculiar to me, though.
>>
>> Dave
>>
>
> I was surprised to read that, but the standard says it is Kosher:
>
> [12.4.2]
>
> "...A destructor can be invoked for a const, volatile or const
> volatile object. A destructor shall not be declared const, volatile
> or const volatile (_class.this_). const and volatile semantics
> (_dcl.type.cv_) are not applied on an object under destruction."

Destroying a const object is fine, but there is no reason to have a const in
the argument.

template<class T> void call_destructor(T & t) { t.~T(); }

X const x;

f(x); // OK, T = X const

f(5); // compile-time fail


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk