Следующие компилируются в G CC 9, но не в clang 10, и мне интересно, какой из двух компиляторов соответствует стандарту:
template<typename T>
struct A {
static const T s;
static const T v;
};
template<typename T>
constexpr const T A<T>::s = T(1);
template<typename T>
constexpr const T A<T>::v = A<T>::s;
int main(int, char**) {
constexpr auto a = A<double>::v;
return 0;
}
Предполагается, что это минимальный пример более серьезная проблема, поэтому поля s
и v
явно объявлены как const
, но определены как constexpr
, это сделано намеренно.
Является ли G CC правильным для компиляции этого кода или Правильно ли clang отклонять его?