https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121267
--- Comment #6 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Jan Schultke from comment #2) > Well sure, char a[] = {"aaaa"}; is fine, just like the initialization of 's' > is fine in the code example (as it should be). > > What I'm interested in how the compiler internals make the initialization of > 't' valid. Is it a bug in template argument deduction, or does GCC just > retry initialization from "aaaa" when it's a brace-enclosed string literal, > which makes the non-template case work properly, but results in > accepts-invalid in the template case, or is it something else entirely? Note I think this part is missed by clang here: 8.5.4 List-initialization [dcl.init.list] p.3.2 Otherwise, if T is a character array and the initializer list has a single element that is an appropriately-typed string literal (8.5.2), initialization is performed as described in that section.