diff --git a/src/libs/3rdparty/cplusplus/Parser.cpp b/src/libs/3rdparty/cplusplus/Parser.cpp
index 187ba24f35121ccfab288c7f177032be0753ffcb..150b8c055f4379a7fa5c22355703096c3587f1ca 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 f3a0675f38402b76a0101ffe928cd8424ccab746..94e8fae2419f19fd723bf5e8762b348a322c3f04 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}};
+}