我有一个包含静态成员的类,该成员设置为以特定方式评估的类本身。这是一个例子
#include <iostream>
#include <string>
struct A{
constexpr A(const int i):_i(i){}
int _i;
static const A One;
};
constexpr A A::One=A(1);
int main()
{
std::cout << A::One._i << std::endl;
return 0;
}
此代码编译并与gcc和clang一起运行,但是如果我使用Intel编译器icc(v19.0.4.227)进行编译,则会得到
icc -std=c++17 test.cpp
test.cpp(10): error: member "A::One" (declared at line 7) was previously not declared constexpr
constexpr A A::One=A(1);
请注意,我无法初始化struct A {}定义中的A :: One,因为类型不完整。是否有适用于Intel编译器的解决方法?
您正在尝试定义一个具有自己类型的静态constexpr
成员的类,这是不可能的。相反,您可以只定义返回所需值的静态constexpr
函数: