Similar question has been already asked.
However, I'd like to understand why, for arrays, first line below does not compile while second line compiles (g++, clang++, icpx):
template<int N> constexpr float x[2]; // ERROR - var not initialized.
template<int N> constexpr float y[N];
// Can now specialize, e.g.:
template<> constexpr float y<2>[2] = {0.0f, 1.0f};