https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105300
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Target Milestone|--- |10.5 Known to fail| |6.1.0 Summary|segfault from static_assert |[10/11/12/13 Regression] |with user-defined string |segfault from static_assert |suffix argument |with user-defined string | |suffix argument Keywords| |diagnostic Known to work| |5.5.0 --- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- MSVC produces a decent error message: <source>(2): error C3690: expected a string literal, but found a user-defined string literal instead Note best definition of the operator is just: void operator""_x(const char *, decltype(sizeof(0))); static_assert(false, "foo"_x); Oh we started to ICE between GCC 5 and 6. Most likely when we started to print out the message too.