Index: lib/AST/DeclCXX.cpp =================================================================== --- lib/AST/DeclCXX.cpp +++ lib/AST/DeclCXX.cpp @@ -560,6 +560,10 @@ ? Constructor->isUserProvided() : !Constructor->isImplicit()) data().Aggregate = false; + // C++1z [dcl.init.aggr]p1: + // - no user-provided, explicit, or inherited constructors, + if (getASTContext().getLangOpts().CPlusPlus1z && Constructor->isExplicit()) + data().Aggregate = false; } // Handle destructors. Index: test/SemaCXX/aggregate-initialization.cpp =================================================================== --- test/SemaCXX/aggregate-initialization.cpp +++ test/SemaCXX/aggregate-initialization.cpp @@ -146,3 +146,12 @@ // expected-error@-5 {{protected constructor}} // expected-note@-30 {{here}} } + +namespace diff_cpp1z_dcl_init_aggr_example { + struct ExplicitDefault { explicit ExplicitDefault() = default; }; + ExplicitDefault d = {}; +#if __cplusplus > 201402L + // expected-error@-2 {{explicit in copy-initialization}} + // expected-note@-4 {{here}} +#endif +}