Sema::PotentiallyEvaluatedIfUsed,
LM.DefaultArgs[I].Param);
- ExprResult DefArgResult(ParseAssignmentExpression());
+ ExprResult DefArgResult;
+ if (Tok.is(tok::l_brace))
+ DefArgResult = ParseBraceInitializer();
+ else
+ DefArgResult = ParseAssignmentExpression();
if (DefArgResult.isInvalid())
Actions.ActOnParamDefaultArgumentError(LM.DefaultArgs[I].Param);
else {
/// parameter-declaration: [C99 6.7.5]
/// declaration-specifiers declarator
/// [C++] declaration-specifiers declarator '=' assignment-expression
+/// [C++11] initializer-clause
/// [GNU] declaration-specifiers declarator attributes
/// declaration-specifiers abstract-declarator[opt]
/// [C++] declaration-specifiers abstract-declarator[opt]
Sema::PotentiallyEvaluatedIfUsed,
Param);
- ExprResult DefArgResult(ParseAssignmentExpression());
+ ExprResult DefArgResult;
+ if (Tok.is(tok::l_brace))
+ DefArgResult = ParseBraceInitializer();
+ else
+ DefArgResult = ParseAssignmentExpression();
if (DefArgResult.isInvalid()) {
Actions.ActOnParamDefaultArgumentError(Param);
SkipUntil(tok::comma, tok::r_paren, true, true);
(void) int({0}); // expected-error {{functional-style cast}}
new int({0}); // expected-error {{cannot initialize}}
}
+
+ void default_argument(int i = {}) {
+ }
+ struct DefaultArgument {
+ void default_argument(int i = {}) {
+ }
+ };
}
namespace PR12118 {