forked from qt-creator/qt-creator
CPlusPlus: Add parser support for declarations of user-defined literals
... without a space before the identifier. Change-Id: I977ffae82eb86f5ae6ea594cba17cc486e63bf6c Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
19
src/libs/3rdparty/cplusplus/Parser.cpp
vendored
19
src/libs/3rdparty/cplusplus/Parser.cpp
vendored
@@ -1533,14 +1533,21 @@ bool Parser::parseOperator(OperatorAST *&node) // ### FIXME
|
||||
} else if (LA() == T_LBRACKET && LA(2) == T_RBRACKET) {
|
||||
ast->op_token = ast->open_token = consumeToken();
|
||||
ast->close_token = consumeToken();
|
||||
} else if (_languageFeatures.cxx11Enabled &&
|
||||
LA() == T_STRING_LITERAL && LA(2) == T_IDENTIFIER &&
|
||||
!tok().f.userDefinedLiteral && tok().string->size() == 0 &&
|
||||
tok(2).identifier->size() > 1 && tok(2).identifier->chars()[0] == '_') {
|
||||
} else if (_languageFeatures.cxx11Enabled && LA() == T_STRING_LITERAL) {
|
||||
// C++11 user-defined literal operator, e.g.:
|
||||
// int operator"" _abc123(const char *str, size_t size) { ... }
|
||||
ast->op_token = consumeToken();
|
||||
consumeToken(); // consume literal operator identifier
|
||||
// There are two variants: With and without a space after the quotes. The former
|
||||
// is deprecated.
|
||||
if (LA(2) == T_IDENTIFIER && !tok().f.userDefinedLiteral
|
||||
&& tok().string->size() == 0 &&
|
||||
tok(2).identifier->size() > 1 && tok(2).identifier->chars()[0] == '_') {
|
||||
ast->op_token = consumeToken();
|
||||
consumeToken(); // consume literal operator identifier
|
||||
} else if (tok().f.userDefinedLiteral) {
|
||||
ast->op_token = consumeToken();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user