В этом фрагменте кода:
template <size_t N>
struct Foo {
static constexpr std::array<char, N> arr{{0}};
static const char *data() { return &arr[0]; }
};
template<>
constexpr std::array<char, 5> Foo<5>::arr;
int main()
{
std::cout << Foo<5>::data() << std::endl;
}
с gcc 5.2 Я получил ссылку undefined на Foo<5ul>::arr
, а clang 3.7 дает ошибку времени компиляции:
Объявление константного элемента constexpr 'arr' требует инициализатора
Что не так, и как static constexpr
быть определено вне объявления класса?