链接器错误与constexpr数组

时间:2018-03-25 13:17:43

标签: c++ c++11 g++ clang++ icc

我一直在编写使用constexpr float[n]来保存多项式拟合系数的代码。代码归结为以下代码段:

#include <iostream>

template<typename Real, size_t degree> struct Data;

template<typename Real> struct Data<Real, 3> {
    constexpr static Real coefficients[4] = {-0.18374177,
                                             1.87998084,
                                             -0.86969933,
                                             0.09227796};
};

int main() {
    std::cout << Data<float, 3>::coefficients[0] << std::endl;
}

使用g ++(版本5.4.0和7.1.0)编译很好。但导致icc(版本18.0.2)和clang ++(版本3.8.0和版本4.0.1)上的链接器错误。从this问题,我明白在数组上使用constexpr是合法的C ++,但它也提到了使用clang ++的链接器错误。如果我删除模板,代码将在icc上编译,但仍会在clang ++中出现链接器错误。

所以我的问题是这是否实际上是合法的C ++(11)?如果这是合法的C ++,为什么其他两个编译器仍然不支持它?如果不是,那是什么使它成为非法?

非常感谢任何输入。

0 个答案:

没有答案