https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88572
--- Comment #9 from Will Wray <wjwray at gmail dot com> --- The patch below seems to work as far as I've tested - please review. It looks like the bool first_initializer_p argument to reshape_init_r gives the context that is needed, according to the function comment; /* ... FIRST_INITIALIZER_P is true if this is the first initializer of the outermost CONSTRUCTOR node. */ If I read this right then this bool arg is true for scalar init and false when initializing a scalar member of an aggregate (class or array). The patch below rejects int ii{{0}}; --- gcc/cp/decl.c +++ gcc/cp/decl.c @@ -6054,16 +6054,19 @@ reshape_init_r (tree type, reshape_iter { if (SCALAR_TYPE_P (type)) { - if (cxx_dialect < cxx11 - /* Isn't value-initialization. */ - || CONSTRUCTOR_NELTS (stripped_init) > 0) + if (cxx_dialect < cxx11 || first_initializer_p) { if (complain & tf_error) error ("braces around scalar initializer for type %qT", type); init = error_mark_node; } - } + else if (CONSTRUCTOR_NELTS (stripped_init) > 0) + { + warning (0, "braces around scalar initializer for type %qT", + type); + } + } else maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS); }