From 0bdf1dc4069d62dbd3348b9ed1a42a6b468e0070 Mon Sep 17 00:00:00 2001 From: Christian Kamm <christian.d.kamm@nokia.com> Date: Wed, 12 Sep 2012 14:35:49 +0200 Subject: [PATCH] C++11: Allow brace initializers in return statements. Like return {1, 2}; Change-Id: I7442da1866b0106bc075783653c95c16ebedb51a Reviewed-by: hjk <qthjk@ovi.com> --- src/libs/3rdparty/cplusplus/Parser.cpp | 5 ++++- tests/auto/cplusplus/cxx11/data/braceInitializers.1.cpp | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/libs/3rdparty/cplusplus/Parser.cpp b/src/libs/3rdparty/cplusplus/Parser.cpp index 187ba24f351..150b8c055f4 100644 --- a/src/libs/3rdparty/cplusplus/Parser.cpp +++ b/src/libs/3rdparty/cplusplus/Parser.cpp @@ -3102,7 +3102,10 @@ bool Parser::parseReturnStatement(StatementAST *&node) if (LA() == T_RETURN) { ReturnStatementAST *ast = new (_pool) ReturnStatementAST; ast->return_token = consumeToken(); - parseExpression(ast->expression); + if (_cxx0xEnabled && LA() == T_LBRACE) + parseBracedInitList0x(ast->expression); + else + parseExpression(ast->expression); match(T_SEMICOLON, &ast->semicolon_token); node = ast; return true; diff --git a/tests/auto/cplusplus/cxx11/data/braceInitializers.1.cpp b/tests/auto/cplusplus/cxx11/data/braceInitializers.1.cpp index f3a0675f384..94e8fae2419 100644 --- a/tests/auto/cplusplus/cxx11/data/braceInitializers.1.cpp +++ b/tests/auto/cplusplus/cxx11/data/braceInitializers.1.cpp @@ -12,3 +12,7 @@ void main() { Type var2{{1, 2, 3}, 4}; var3 += {1, 2}; } + +T foo() { + return {1, 2, {"foo", 7}}; +} -- GitLab