Это Не указано .
Вы используете конструкцию , где вы ссылаетесь на определение переменной на себя - возможно, в некоторой степени аналогично высказыванию int i = i-1
.В случае clang, он просто использует общее определение шаблона
template <std::size_t N>
struct foo
{ static std::size_t value; };//without specialization this will be ZERO initialized
, потому что он не видел «себя», как обычный шаблонный класс или функция (в отличие от случая gcc).
Для суммирования:
1) Legit
2) Unspecified
Чтобы избежать проблем, используйте constexpr и специализируйте классшаблон вместо.