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

Manasij Mukherjee manasij7479 at gmail.com
Sun Feb 22 07:56:53 PST 2015


Hi,
I am trying to fix this bug,
http://llvm.org/bugs/show_bug.cgi?id=22508

In short,
struct A
{
    ~decltype(auto){}
};
is accepted when it should not be.

In Parser::ParseUnqualifiedId (ParseExprCXX.cpp:2488 ),

// Parse the '~'.
    SourceLocation TildeLoc = ConsumeToken();

    if (SS.isEmpty() && Tok.is(tok::kw_decltype)) {
      DeclSpec DS(AttrFactory);
      SourceLocation EndLoc = ParseDecltypeSpecifier(DS);
      if (ParsedType Type = Actions.getDestructorType(DS, ObjectType)) {
        Result.setDestructorName(TildeLoc, Type, EndLoc);
        return false;
      }
      return true;
    }

After this, clang handles the identifier case.

Removing this block results in clang reporting the correct diagnostic:
"error: expected a class name after '~' to name a destructor"

Why is this block present ?
Can anyone point out what is the expected behavior ?

Thanks
Manasij Mukherjee
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20150222/a119a403/attachment.html>


More information about the cfe-dev mailing list