[cfe-dev] When does ~decltype(expr) make sense ?

Richard Smith richard at metafoo.co.uk
Mon Feb 23 10:56:09 PST 2015


On Sun, Feb 22, 2015 at 3:24 PM, David Blaikie <dblaikie at gmail.com> wrote:

>
>
> On Sun, Feb 22, 2015 at 2:33 PM, Manasij Mukherjee <manasij7479 at gmail.com>
> wrote:
>
>>
>>
>>> 5.1.1 [expr.prim.general] in paragraph 8 states that "The form ~
>>> decltype-specifier also denotes the destructor, but it shall not be used as
>>> the unqualified-id in a qualified-id."
>>>
>>> I implemented this a while ago, but it looks like (r146155) it was for
>>> expressions (x.~decltype(*x)(), for example) not necessarily for dtor
>>> declarations.
>>>
>>> I do not clearly understand what this sentence implies.
>> Could you elaborate?
>>
>> Also, if the meaning is as you interpreted it, what is the rationale for
>> allowing x.~decltype(*x)() ?
>>
>
> Not quite sure I understand this question (though I did make a mistake in
> that example, should've been x->~decltype(*x)())
>

That doesn't work either: decltype(*x) is a reference type. It'd need to be
something ridiculous like

  X x;
  x.~decltype(x)();
  new (&x) X;

5.1.1 talks about how ~decltype(...) is a valid unqualified id, except in
> the case of a qualified id (ie, you can't write "x::y::~decltype(...)"). So
> that's how x->~decltype(*x)() is valid, as far as I see/read/understand it
> - wherever you can use an unqualified-id that would name a dtor, you can
> use ~decltype(...) too (ecxept in the qualified-id case).
>

Right; you can use ~decltype(...)() to invoke a destructor, but you can't
use ~decltype to declare a destructor.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20150223/e786c058/attachment.html>


More information about the cfe-dev mailing list