我想确认一下这段代码是否符合C++17的标准。
#include <iostream>
template<int N> inline constexpr float MyConst;
template<> inline constexpr float MyConst<1> = 1.1f;
template<> inline constexpr float MyConst<2> = 2.2f;
int main ()
{
std::cout << MyConst<1> << '\n';
return 0;
}
如果使用g++和MSVC编译,我不会收到错误信息(并且可以得到正确的输出结果)。
但是,Intel和clang会报错:
test.cpp(3): error: missing initializer for constexpr variable
template<int N> inline constexpr float MyConst;
^
使用-std=c++17
进行编译(对于MSVC,使用/std:c++17
)。
在godbolt上尝试了最新的编译器,并在本地机器上测试过。