https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87476
--- Comment #4 from Bernd Edlinger <edlinger at gcc dot gnu.org> --- - if (char_type != char_type_node - && char_type != signed_char_type_node - && char_type != unsigned_char_type_node) + if (char_type != char_type_node) This restored the previous logic, but maybe that was already broken. This (valid?) test case is rejected by gcc-8.2 and earlier: template <class> class f { public: void operator()() { constexpr unsigned char p[] = "11111"; } }; void v() { f<int>{}(); }