以下在 GCC 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;
}
Run Code Online (Sandbox Code Playgroud)
这是一个更大问题的最小例子,这就是为什么字段s
和v
显式声明为const
但被定义为constexpr
,这是故意的。
GCC 编译该代码是正确的还是 clang 正确拒绝它?