diff --git a/src/libs/3rdparty/cplusplus/AST.cpp b/src/libs/3rdparty/cplusplus/AST.cpp
index 1510d4dcfc7ab10cee698360931af602d6e5f789..fd8b4fcfedd1c6411ed2ea14e6f1d56e13ca83e5 100644
--- a/src/libs/3rdparty/cplusplus/AST.cpp
+++ b/src/libs/3rdparty/cplusplus/AST.cpp
@@ -2052,32 +2052,6 @@ unsigned NewExpressionAST::lastToken() const
     return 1;
 }
 
-/** \generated */
-unsigned NewInitializerAST::firstToken() const
-{
-    if (lparen_token)
-        return lparen_token;
-    if (expression)
-        if (unsigned candidate = expression->firstToken())
-            return candidate;
-    if (rparen_token)
-        return rparen_token;
-    return 0;
-}
-
-/** \generated */
-unsigned NewInitializerAST::lastToken() const
-{
-    if (rparen_token)
-        return rparen_token + 1;
-    if (expression)
-        if (unsigned candidate = expression->lastToken())
-            return candidate;
-    if (lparen_token)
-        return lparen_token + 1;
-    return 1;
-}
-
 /** \generated */
 unsigned ExpressionListParenAST::firstToken() const
 {
diff --git a/src/libs/3rdparty/cplusplus/AST.h b/src/libs/3rdparty/cplusplus/AST.h
index 9ebe42bd17625a0deb876beb5fa72f6bccb1a26e..d6c62a3c7dd5264ae79aea86766ed5e7ce47cfb7 100644
--- a/src/libs/3rdparty/cplusplus/AST.h
+++ b/src/libs/3rdparty/cplusplus/AST.h
@@ -198,7 +198,6 @@ public:
     virtual NestedNameSpecifierAST *asNestedNameSpecifier() { return 0; }
     virtual NewArrayDeclaratorAST *asNewArrayDeclarator() { return 0; }
     virtual NewExpressionAST *asNewExpression() { return 0; }
-    virtual NewInitializerAST *asNewInitializer() { return 0; }
     virtual NewTypeIdAST *asNewTypeId() { return 0; }
     virtual NoExceptSpecificationAST *asNoExceptSpecification() { return 0; }
     virtual NumericLiteralAST *asNumericLiteral() { return 0; }
@@ -2502,7 +2501,7 @@ public:
 
     NewTypeIdAST *new_type_id;
 
-    NewInitializerAST *new_initializer;
+    ExpressionAST *new_initializer; // either ExpressionListParenAST or BracedInitializerAST
 
 public:
     NewExpressionAST()
@@ -2528,32 +2527,6 @@ protected:
     virtual bool match0(AST *, ASTMatcher *);
 };
 
-class CPLUSPLUS_EXPORT NewInitializerAST: public AST
-{
-public:
-    unsigned lparen_token;
-    ExpressionAST *expression;
-    unsigned rparen_token;
-
-public:
-    NewInitializerAST()
-        : lparen_token(0)
-        , expression(0)
-        , rparen_token(0)
-    {}
-
-    virtual NewInitializerAST *asNewInitializer() { return this; }
-
-    virtual unsigned firstToken() const;
-    virtual unsigned lastToken() const;
-
-    virtual NewInitializerAST *clone(MemoryPool *pool) const;
-
-protected:
-    virtual void accept0(ASTVisitor *visitor);
-    virtual bool match0(AST *, ASTMatcher *);
-};
-
 class CPLUSPLUS_EXPORT NewTypeIdAST: public AST
 {
 public:
diff --git a/src/libs/3rdparty/cplusplus/ASTClone.cpp b/src/libs/3rdparty/cplusplus/ASTClone.cpp
index 5223ce8c7315bc2623c29f3f05eeea5aaedc69bb..7c151f09f6d3d32d3dccffdb4da60ca8f0d8efb6 100644
--- a/src/libs/3rdparty/cplusplus/ASTClone.cpp
+++ b/src/libs/3rdparty/cplusplus/ASTClone.cpp
@@ -930,16 +930,6 @@ NewExpressionAST *NewExpressionAST::clone(MemoryPool *pool) const
     return ast;
 }
 
-NewInitializerAST *NewInitializerAST::clone(MemoryPool *pool) const
-{
-    NewInitializerAST *ast = new (pool) NewInitializerAST;
-    ast->lparen_token = lparen_token;
-    if (expression)
-        ast->expression = expression->clone(pool);
-    ast->rparen_token = rparen_token;
-    return ast;
-}
-
 NewTypeIdAST *NewTypeIdAST::clone(MemoryPool *pool) const
 {
     NewTypeIdAST *ast = new (pool) NewTypeIdAST;
diff --git a/src/libs/3rdparty/cplusplus/ASTMatch0.cpp b/src/libs/3rdparty/cplusplus/ASTMatch0.cpp
index a1bdb656e84b0cd639e2f1ca8e61feb632a0197d..de743a2f7f8f71eded6d58147f808e120ee7ce89 100644
--- a/src/libs/3rdparty/cplusplus/ASTMatch0.cpp
+++ b/src/libs/3rdparty/cplusplus/ASTMatch0.cpp
@@ -624,14 +624,6 @@ bool NewExpressionAST::match0(AST *pattern, ASTMatcher *matcher)
     return false;
 }
 
-bool NewInitializerAST::match0(AST *pattern, ASTMatcher *matcher)
-{
-    if (NewInitializerAST *_other = pattern->asNewInitializer())
-        return matcher->match(this, _other);
-
-    return false;
-}
-
 bool NewTypeIdAST::match0(AST *pattern, ASTMatcher *matcher)
 {
     if (NewTypeIdAST *_other = pattern->asNewTypeId())
diff --git a/src/libs/3rdparty/cplusplus/ASTMatcher.cpp b/src/libs/3rdparty/cplusplus/ASTMatcher.cpp
index 31401c8f4f1e1288c6332078ef61f090c3a6c4a5..e2df7d75830bc4d8017414d331410f197d334325 100644
--- a/src/libs/3rdparty/cplusplus/ASTMatcher.cpp
+++ b/src/libs/3rdparty/cplusplus/ASTMatcher.cpp
@@ -1585,23 +1585,6 @@ bool ASTMatcher::match(NewExpressionAST *node, NewExpressionAST *pattern)
     return true;
 }
 
-bool ASTMatcher::match(NewInitializerAST *node, NewInitializerAST *pattern)
-{
-    (void) node;
-    (void) pattern;
-
-    pattern->lparen_token = node->lparen_token;
-
-    if (! pattern->expression)
-        pattern->expression = node->expression;
-    else if (! AST::match(node->expression, pattern->expression, this))
-        return false;
-
-    pattern->rparen_token = node->rparen_token;
-
-    return true;
-}
-
 bool ASTMatcher::match(NewTypeIdAST *node, NewTypeIdAST *pattern)
 {
     (void) node;
diff --git a/src/libs/3rdparty/cplusplus/ASTMatcher.h b/src/libs/3rdparty/cplusplus/ASTMatcher.h
index dd265d3db8632ca6eb05b64807201b5c4eaa9eee..29842253cdaeab7efde9b2cd101101b9a8348d6f 100644
--- a/src/libs/3rdparty/cplusplus/ASTMatcher.h
+++ b/src/libs/3rdparty/cplusplus/ASTMatcher.h
@@ -100,7 +100,6 @@ public:
     virtual bool match(NestedNameSpecifierAST *node, NestedNameSpecifierAST *pattern);
     virtual bool match(NewArrayDeclaratorAST *node, NewArrayDeclaratorAST *pattern);
     virtual bool match(NewExpressionAST *node, NewExpressionAST *pattern);
-    virtual bool match(NewInitializerAST *node, NewInitializerAST *pattern);
     virtual bool match(NewTypeIdAST *node, NewTypeIdAST *pattern);
     virtual bool match(NoExceptSpecificationAST *node, NoExceptSpecificationAST *pattern);
     virtual bool match(NumericLiteralAST *node, NumericLiteralAST *pattern);
diff --git a/src/libs/3rdparty/cplusplus/ASTPatternBuilder.h b/src/libs/3rdparty/cplusplus/ASTPatternBuilder.h
index 44068494446ac9674702187b52d09875bcb93db2..142737d44e76be3e5268f655282d20444c7e5429 100644
--- a/src/libs/3rdparty/cplusplus/ASTPatternBuilder.h
+++ b/src/libs/3rdparty/cplusplus/ASTPatternBuilder.h
@@ -599,7 +599,7 @@ public:
         return __ast;
     }
 
-    NewExpressionAST *NewExpression(ExpressionListParenAST *new_placement = 0, ExpressionAST *type_id = 0, NewTypeIdAST *new_type_id = 0, NewInitializerAST *new_initializer = 0)
+    NewExpressionAST *NewExpression(ExpressionListParenAST *new_placement = 0, ExpressionAST *type_id = 0, NewTypeIdAST *new_type_id = 0, ExpressionAST *new_initializer = 0)
     {
         NewExpressionAST *__ast = new (&pool) NewExpressionAST;
         __ast->new_placement = new_placement;
@@ -609,13 +609,6 @@ public:
         return __ast;
     }
 
-    NewInitializerAST *NewInitializer(ExpressionAST *expression = 0)
-    {
-        NewInitializerAST *__ast = new (&pool) NewInitializerAST;
-        __ast->expression = expression;
-        return __ast;
-    }
-
     NewTypeIdAST *NewTypeId(SpecifierListAST *type_specifier_list = 0, PtrOperatorListAST *ptr_operator_list = 0, NewArrayDeclaratorListAST *new_array_declarator_list = 0)
     {
         NewTypeIdAST *__ast = new (&pool) NewTypeIdAST;
diff --git a/src/libs/3rdparty/cplusplus/ASTVisit.cpp b/src/libs/3rdparty/cplusplus/ASTVisit.cpp
index b06b9ea3b6986ba8215aded1f29303e24d652aad..6434a7c5e2b60878d64fd1914427847e780e8f6c 100644
--- a/src/libs/3rdparty/cplusplus/ASTVisit.cpp
+++ b/src/libs/3rdparty/cplusplus/ASTVisit.cpp
@@ -671,14 +671,6 @@ void NewExpressionAST::accept0(ASTVisitor *visitor)
     visitor->endVisit(this);
 }
 
-void NewInitializerAST::accept0(ASTVisitor *visitor)
-{
-    if (visitor->visit(this)) {
-        accept(expression, visitor);
-    }
-    visitor->endVisit(this);
-}
-
 void NewTypeIdAST::accept0(ASTVisitor *visitor)
 {
     if (visitor->visit(this)) {
diff --git a/src/libs/3rdparty/cplusplus/ASTVisitor.h b/src/libs/3rdparty/cplusplus/ASTVisitor.h
index 6b097d9f5245c4de629775f75d48632aca8f9ec0..a7d3f728f633974b3a7242ef03b0f32bf0dc0836 100644
--- a/src/libs/3rdparty/cplusplus/ASTVisitor.h
+++ b/src/libs/3rdparty/cplusplus/ASTVisitor.h
@@ -142,7 +142,6 @@ public:
     virtual bool visit(NestedNameSpecifierAST *) { return true; }
     virtual bool visit(NewArrayDeclaratorAST *) { return true; }
     virtual bool visit(NewExpressionAST *) { return true; }
-    virtual bool visit(NewInitializerAST *) { return true; }
     virtual bool visit(NewTypeIdAST *) { return true; }
     virtual bool visit(NoExceptSpecificationAST *) { return true; }
     virtual bool visit(NumericLiteralAST *) { return true; }
@@ -288,7 +287,6 @@ public:
     virtual void endVisit(NestedNameSpecifierAST *) {}
     virtual void endVisit(NewArrayDeclaratorAST *) {}
     virtual void endVisit(NewExpressionAST *) {}
-    virtual void endVisit(NewInitializerAST *) {}
     virtual void endVisit(NewTypeIdAST *) {}
     virtual void endVisit(NoExceptSpecificationAST *) {}
     virtual void endVisit(NumericLiteralAST *) {}
diff --git a/src/libs/3rdparty/cplusplus/ASTfwd.h b/src/libs/3rdparty/cplusplus/ASTfwd.h
index 7146134782d068c7e3bbd80598f13e08efbacfbc..722a5b0d38d802359dc945eb604a817719383306 100644
--- a/src/libs/3rdparty/cplusplus/ASTfwd.h
+++ b/src/libs/3rdparty/cplusplus/ASTfwd.h
@@ -105,7 +105,6 @@ class NestedExpressionAST;
 class NestedNameSpecifierAST;
 class NewArrayDeclaratorAST;
 class NewExpressionAST;
-class NewInitializerAST;
 class NewTypeIdAST;
 class NoExceptSpecificationAST;
 class NumericLiteralAST;
diff --git a/src/libs/3rdparty/cplusplus/Bind.cpp b/src/libs/3rdparty/cplusplus/Bind.cpp
index 7a6a1cbf43ff569f527d21b6cfea34d20deff4db..0aa0f437126138875328b60e89910c496689b4ae 100644
--- a/src/libs/3rdparty/cplusplus/Bind.cpp
+++ b/src/libs/3rdparty/cplusplus/Bind.cpp
@@ -580,23 +580,6 @@ FullySpecifiedType Bind::newArrayDeclarator(NewArrayDeclaratorAST *ast, const Fu
     return type;
 }
 
-bool Bind::visit(NewInitializerAST *ast)
-{
-    (void) ast;
-    assert(!"unreachable");
-    return false;
-}
-
-void Bind::newInitializer(NewInitializerAST *ast)
-{
-    if (! ast)
-        return;
-
-    // unsigned lparen_token = ast->lparen_token;
-    ExpressionTy expression = this->expression(ast->expression);
-    // unsigned rparen_token = ast->rparen_token;
-}
-
 bool Bind::visit(NewTypeIdAST *ast)
 {
     (void) ast;
@@ -1637,7 +1620,7 @@ bool Bind::visit(NewExpressionAST *ast)
     ExpressionTy type_id = this->expression(ast->type_id);
     // unsigned rparen_token = ast->rparen_token;
     this->newTypeId(ast->new_type_id);
-    this->newInitializer(ast->new_initializer);
+    this->expression(ast->new_initializer);
     return false;
 }
 
diff --git a/src/libs/3rdparty/cplusplus/Bind.h b/src/libs/3rdparty/cplusplus/Bind.h
index ff1ec0f4becc600982a5b55883d093097f90c158..93022b9af77ce75dc56a9dfc63c4ca56e6baae37 100644
--- a/src/libs/3rdparty/cplusplus/Bind.h
+++ b/src/libs/3rdparty/cplusplus/Bind.h
@@ -87,7 +87,6 @@ protected:
     const Name *nestedNameSpecifier(NestedNameSpecifierAST *ast);
     void newPlacement(ExpressionListParenAST *ast);
     FullySpecifiedType newArrayDeclarator(NewArrayDeclaratorAST *ast, const FullySpecifiedType &init);
-    void newInitializer(NewInitializerAST *ast);
     FullySpecifiedType newTypeId(NewTypeIdAST *ast);
     OperatorNameId::Kind cppOperator(OperatorAST *ast);
     void parameterDeclarationClause(ParameterDeclarationClauseAST *ast, unsigned lparen_token, Function *fun);
@@ -123,7 +122,6 @@ protected:
     virtual bool visit(MemInitializerAST *ast);
     virtual bool visit(NestedNameSpecifierAST *ast);
     virtual bool visit(NewArrayDeclaratorAST *ast);
-    virtual bool visit(NewInitializerAST *ast);
     virtual bool visit(NewTypeIdAST *ast);
     virtual bool visit(OperatorAST *ast);
     virtual bool visit(ParameterDeclarationClauseAST *ast);
diff --git a/src/libs/3rdparty/cplusplus/Parser.cpp b/src/libs/3rdparty/cplusplus/Parser.cpp
index 58b4f905356a2cd23e144034d6cda85a7b40900c..8c2b26af07a5b76d418ad61ad8a3ff9efd1b91a2 100644
--- a/src/libs/3rdparty/cplusplus/Parser.cpp
+++ b/src/libs/3rdparty/cplusplus/Parser.cpp
@@ -5091,20 +5091,13 @@ bool Parser::parseNewArrayDeclarator(NewArrayDeclaratorListAST *&node)
     return true;
 }
 
-bool Parser::parseNewInitializer(NewInitializerAST *&node)
+bool Parser::parseNewInitializer(ExpressionAST *&node)
 {
     DEBUG_THIS_RULE();
     if (LA() == T_LPAREN) {
-        unsigned lparen_token = consumeToken();
-        ExpressionAST *expression = 0;
-        if (LA() == T_RPAREN || parseExpression(expression)) {
-            NewInitializerAST *ast = new (_pool) NewInitializerAST;
-            ast->lparen_token = lparen_token;
-            ast->expression = expression;
-            match(T_RPAREN, &ast->rparen_token);
-            node = ast;
-            return true;
-        }
+        return parseExpressionListParen(node);
+    } else if (_cxx0xEnabled && LA() == T_LBRACE) {
+        return parseBracedInitList0x(node);
     }
     return false;
 }
diff --git a/src/libs/3rdparty/cplusplus/Parser.h b/src/libs/3rdparty/cplusplus/Parser.h
index a11de40b6303b2dc760ff27e2b254aa32df910f8..f5971e40400a74442c36f9f697bb92836fc3e498 100644
--- a/src/libs/3rdparty/cplusplus/Parser.h
+++ b/src/libs/3rdparty/cplusplus/Parser.h
@@ -133,7 +133,7 @@ public:
     bool parseNewArrayDeclarator(NewArrayDeclaratorListAST *&node);
     bool parseNewExpression(ExpressionAST *&node);
     bool parseExpressionListParen(ExpressionAST *&node);
-    bool parseNewInitializer(NewInitializerAST *&node);
+    bool parseNewInitializer(ExpressionAST *&node);
     bool parseNewTypeId(NewTypeIdAST *&node);
     bool parseOperator(OperatorAST *&node);
     bool parseConversionFunctionId(NameAST *&node);
diff --git a/src/libs/cplusplus/FindUsages.cpp b/src/libs/cplusplus/FindUsages.cpp
index f84056ff94543f3ca7a936e3afd064d62ae2ed60..237482647b23558448b45c7362d0a9c67bc44956 100644
--- a/src/libs/cplusplus/FindUsages.cpp
+++ b/src/libs/cplusplus/FindUsages.cpp
@@ -594,23 +594,6 @@ void FindUsages::newArrayDeclarator(NewArrayDeclaratorAST *ast)
     // unsigned rbracket_token = ast->rbracket_token;
 }
 
-bool FindUsages::visit(NewInitializerAST *ast)
-{
-    (void) ast;
-    Q_ASSERT(!"unreachable");
-    return false;
-}
-
-void FindUsages::newInitializer(NewInitializerAST *ast)
-{
-    if (! ast)
-        return;
-
-    // unsigned lparen_token = ast->lparen_token;
-    this->expression(ast->expression);
-    // unsigned rparen_token = ast->rparen_token;
-}
-
 bool FindUsages::visit(NewTypeIdAST *ast)
 {
     (void) ast;
@@ -1295,7 +1278,7 @@ bool FindUsages::visit(NewExpressionAST *ast)
     this->expression(ast->type_id);
     // unsigned rparen_token = ast->rparen_token;
     this->newTypeId(ast->new_type_id);
-    this->newInitializer(ast->new_initializer);
+    this->expression(ast->new_initializer);
     return false;
 }
 
diff --git a/src/libs/cplusplus/FindUsages.h b/src/libs/cplusplus/FindUsages.h
index d5e15555d9a75472854ee8033026852a3606e934..24bebc8a55577d4b1a21ef5f27168be1d628fd2b 100644
--- a/src/libs/cplusplus/FindUsages.h
+++ b/src/libs/cplusplus/FindUsages.h
@@ -106,7 +106,6 @@ protected:
     void nestedNameSpecifier(NestedNameSpecifierAST *ast);
     void newPlacement(ExpressionListParenAST *ast);
     void newArrayDeclarator(NewArrayDeclaratorAST *ast);
-    void newInitializer(NewInitializerAST *ast);
     void newTypeId(NewTypeIdAST *ast);
     void cppOperator(OperatorAST *ast);
     void parameterDeclarationClause(ParameterDeclarationClauseAST *ast);
@@ -138,7 +137,6 @@ protected:
     virtual bool visit(MemInitializerAST *ast);
     virtual bool visit(NestedNameSpecifierAST *ast);
     virtual bool visit(NewArrayDeclaratorAST *ast);
-    virtual bool visit(NewInitializerAST *ast);
     virtual bool visit(NewTypeIdAST *ast);
     virtual bool visit(OperatorAST *ast);
     virtual bool visit(ParameterDeclarationClauseAST *ast);
diff --git a/src/plugins/cpptools/cppchecksymbols.cpp b/src/plugins/cpptools/cppchecksymbols.cpp
index 709c175c2ae373fdb9d019855fd3b99d9d5e00b8..cd77278e6bd58a6d6d840e6d5de0c84d79871208 100644
--- a/src/plugins/cpptools/cppchecksymbols.cpp
+++ b/src/plugins/cpptools/cppchecksymbols.cpp
@@ -663,13 +663,14 @@ bool CheckSymbols::visit(NewExpressionAST *ast)
         if (binding && nameAST) {
             int arguments = 0;
             if (ast->new_initializer) {
-                if (ExpressionAST *expr = ast->new_initializer->expression) {
-                    while (BinaryExpressionAST *binExpr = expr->asBinaryExpression()) {
-                        expr = binExpr->right_expression;
-                        ++arguments;
-                    }
+                ExpressionListAST *list = 0;
+                if (ExpressionListParenAST *exprListParen = ast->new_initializer->asExpressionListParen()) {
+                    list = exprListParen->expression_list;
+                } else if (BracedInitializerAST *braceInit = ast->new_initializer->asBracedInitializer()) {
+                    list = braceInit->expression_list;
                 }
-
+                for (ExpressionListAST *it = list; it; it = it->next)
+                    ++arguments;
             }
 
             Scope *scope = enclosingScope();
diff --git a/tests/auto/cplusplus/cxx11/data/braceInitializers.3.cpp b/tests/auto/cplusplus/cxx11/data/braceInitializers.3.cpp
index 58b5a8dd482df12261cae83009de93c615e975b8..5105b4690c5b3c844708b0c82dd72a5715578d86 100644
--- a/tests/auto/cplusplus/cxx11/data/braceInitializers.3.cpp
+++ b/tests/auto/cplusplus/cxx11/data/braceInitializers.3.cpp
@@ -1,3 +1,6 @@
 auto x = int{};
 auto y = Foo{};
 auto z = typename Foo<T>{};
+
+auto d = new C(1, abc...);
+auto e = new C{1, 2, 3};
diff --git a/tests/tools/cplusplus-dump/dumpers.inc b/tests/tools/cplusplus-dump/dumpers.inc
index 6e4ec32e74cfec68295c0d5afdcbf07be827c4e6..4ce49361e63fa62bda971bf01fe93d6a2d5228cd 100644
--- a/tests/tools/cplusplus-dump/dumpers.inc
+++ b/tests/tools/cplusplus-dump/dumpers.inc
@@ -906,16 +906,6 @@ virtual bool visit(NewExpressionAST *ast)
     return false;
 }
 
-virtual bool visit(NewInitializerAST *ast)
-{
-    if (ast->lparen_token)
-        terminal(ast->lparen_token, ast);
-    nonterminal(ast->expression);
-    if (ast->rparen_token)
-        terminal(ast->rparen_token, ast);
-    return false;
-}
-
 virtual bool visit(NewTypeIdAST *ast)
 {
     for (SpecifierListAST *iter = ast->type_specifier_list; iter; iter = iter->next)