diff options
author | David Blaikie <dblaikie@gmail.com> | 2011-12-04 05:04:18 +0000 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2011-12-04 05:04:18 +0000 |
commit | 42d6d0c91ab089cb252ab2f91c16d4557f458a2c (patch) | |
tree | 798a87db00244b0536a6b3880eb6c040218aa70d /lib/Parse/ParseExprCXX.cpp | |
parent | 649657e7d6c150136cae5ab22e39b9794cff80cc (diff) |
Support decltype in nested-name-specifiers.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145785 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Parse/ParseExprCXX.cpp')
-rw-r--r-- | lib/Parse/ParseExprCXX.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/lib/Parse/ParseExprCXX.cpp b/lib/Parse/ParseExprCXX.cpp index d9983d4167..79d2ec21ab 100644 --- a/lib/Parse/ParseExprCXX.cpp +++ b/lib/Parse/ParseExprCXX.cpp @@ -168,6 +168,22 @@ bool Parser::ParseOptionalCXXScopeSpecifier(CXXScopeSpec &SS, *MayBePseudoDestructor = false; } + if (Tok.is(tok::kw_decltype) || Tok.is(tok::annot_decltype)) { + DeclSpec DS(AttrFactory); + SourceLocation DeclLoc = Tok.getLocation(); + SourceLocation EndLoc = ParseDecltypeSpecifier(DS); + if (Tok.isNot(tok::coloncolon)) { + AnnotateExistingDecltypeSpecifier(DS, DeclLoc, EndLoc); + return false; + } + + SourceLocation CCLoc = ConsumeToken(); + if (Actions.ActOnCXXNestedNameSpecifierDecltype(SS, DS, CCLoc)) + SS.SetInvalid(SourceRange(DeclLoc, CCLoc)); + + HasScopeSpecifier = true; + } + while (true) { if (HasScopeSpecifier) { // C++ [basic.lookup.classref]p5: |