From 9b7d1901ba5a39fb04c7ab30cada7753fbeb5770 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Wed, 12 Sep 2012 13:45:36 +0200 Subject: [PATCH] C++11: Allow brace initializers in assignment expressions. Like: var += {1, 2}; in a function context. Change-Id: I3936c97c4fcb6b3dcac2979e0508d422d47fddfc Reviewed-by: hjk --- src/libs/3rdparty/cplusplus/Parser.cpp | 9 +++++++-- tests/auto/cplusplus/cxx11/data/braceInitializers.1.cpp | 6 ++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/libs/3rdparty/cplusplus/Parser.cpp b/src/libs/3rdparty/cplusplus/Parser.cpp index 5c21be4540e..187ba24f351 100644 --- a/src/libs/3rdparty/cplusplus/Parser.cpp +++ b/src/libs/3rdparty/cplusplus/Parser.cpp @@ -5202,8 +5202,13 @@ void Parser::parseExpressionWithOperatorPrecedence(ExpressionAST *&lhs, int minP if (operPrecedence <= Prec::Conditional && isCPlusPlus) { // in C++ you can put a throw in the right-most expression of a conditional expression, // or an assignment, so some special handling: - if (!parseAssignmentExpression(rhs)) - return; + if (_cxx0xEnabled) { + if (!parseInitializerClause0x(rhs)) + return; + } else { + if (!parseAssignmentExpression(rhs)) + return; + } } else { // for C & all other expressions: if (!parseCastExpression(rhs)) diff --git a/tests/auto/cplusplus/cxx11/data/braceInitializers.1.cpp b/tests/auto/cplusplus/cxx11/data/braceInitializers.1.cpp index c250d60985b..f3a0675f384 100644 --- a/tests/auto/cplusplus/cxx11/data/braceInitializers.1.cpp +++ b/tests/auto/cplusplus/cxx11/data/braceInitializers.1.cpp @@ -6,3 +6,9 @@ class C { Type var1 = {1, 2, 3}; Type var2{1, 2, 3}; }; + +void main() { + var1 = {1, 2, {3, 4} }; + Type var2{{1, 2, 3}, 4}; + var3 += {1, 2}; +}