https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63707
--- Comment #7 from Jonathan Wakely <redi at gcc dot gnu.org> --- Reduced from PR 64887: struct string { string(const char*) { } ~string(); // make this type non-trivial }; struct A { string s; A() = delete; A(const A&) = delete; A(A&&) = delete; A(const char*); }; A arr[2] = {{"a"}, {"b"}}; // ok struct Aggr { A arr[2]; Aggr() : arr{{"a"}, {"b"}} {} // error }; The member of non-trivial type is required to trigger the error, presumably because it makes the destructor non-trivial.