https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52036
Michel Morin <mimomorin at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |mimomorin at gmail dot com --- Comment #11 from Michel Morin <mimomorin at gmail dot com> --- The internal linkage testcase template <typename T, const T &val> class TestClass { /* ... */ }; constexpr float pi = 3.14; int main() { TestClass<float, pi> test; } compiles successfully from GCC 6. However, Richard's testcase (i.e. testcase in the Standard) template<class T, const char* p> class X { /* ... */ }; const char p[] = "Vivisectionist"; X<int,p> x; fails to compile even on GCC 7 (in C++11/14 modes) with this error message error: the value of 'p' is not usable in a constant expression X<int,p> x; ^ note: 'p' was not declared 'constexpr' const char p[] = "Vivisectionist"; As the message suggests, if `p` is declared as `constexpr` it compiles fine. Note that in a C++1z mode (from GCC 5) it compiles fine without `constexpr`.