https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61323
--- Comment #1 from Joel Yliluoma <bisqwit at iki dot fi> --- Interestingly enough, only if you add the term "constexpr" to the array declaration, you get an actually meaningful error message: constexpr const char* table7[10] = {}; template<unsigned size, const char*const (&table)[size]> void test7() { } void tester7() { test7<10,table7>(); } Produces: test.cc:42:35: error: 'table7' is not a valid template argument for type 'const char* const (&)[10]' because object 'table7' has not external linkage void tester7() { test7<10,table7>(); } The problem is that this very setting (non external linkage object as template argument) should be allowed by C++11 -- the same standard that also gives us constexpr.