summaryrefslogtreecommitdiff
path: root/src/libs/3rdparty/cplusplus/Parser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/3rdparty/cplusplus/Parser.cpp')
-rw-r--r--src/libs/3rdparty/cplusplus/Parser.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/libs/3rdparty/cplusplus/Parser.cpp b/src/libs/3rdparty/cplusplus/Parser.cpp
index a8c8be7979..ca77a8b5d7 100644
--- a/src/libs/3rdparty/cplusplus/Parser.cpp
+++ b/src/libs/3rdparty/cplusplus/Parser.cpp
@@ -3483,6 +3483,7 @@ bool Parser::lookAtBuiltinTypeSpecifier() const
case T_DOUBLE:
case T_VOID:
case T_AUTO:
+ case T_DECLTYPE:
return true;
// [gcc] extensions
case T___TYPEOF__:
@@ -3579,6 +3580,17 @@ bool Parser::parseBuiltinTypeSpecifier(SpecifierListAST *&node)
parseUnaryExpression(ast->expression);
node = new (_pool) SpecifierListAST(ast);
return true;
+ } else if (LA() == T_DECLTYPE) {
+ DecltypeSpecifierAST *ast = new (_pool) DecltypeSpecifierAST;
+ ast->decltype_token = consumeToken();
+ match(T_LPAREN, &ast->lparen_token);
+ if (parseExpression(ast->expression)) {
+ match(T_RPAREN, &ast->rparen_token);
+ node = new (_pool) SpecifierListAST(ast);
+ return true;
+ }
+ skipUntilDeclaration();
+ return true;
} else if (lookAtBuiltinTypeSpecifier()) {
SimpleSpecifierAST *ast = new (_pool) SimpleSpecifierAST;
ast->specifier_token = consumeToken();