使用Intel C ++编译器定义constexpr类型

问题描述 投票:0回答:1

我有一个包含静态成员的类,该成员设置为以特定方式评​​估的类本身。这是一个例子

#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编译器的解决方法?

c++ intel constexpr icc
1个回答
0
投票

您正在尝试定义一个具有自己类型的静态constexpr成员的类,这是不可能的。相反,您可以只定义返回所需值的静态constexpr函数:

© www.soinside.com 2019 - 2024. All rights reserved.