如何解决模板类不使用最新的英特尔编译器进行编译
以下代码段使用 intel icc 2021.2.0 和 clang 编译,没有任何警告。但它不编译 icc 2021.3.0 或 gcc 11.1 抛出错误
#include <array>
class Base {
public:
enum Types { Al,Mg };
static constexpr unsigned int P = 2;
static constexpr unsigned int bin_Al = 1;
static constexpr unsigned int bin_Mg = 300;
static constexpr std::array<unsigned int,P> bins{bin_Al,bin_Mg};
Base();
};
template <typename Base::Types pNo>
class Derived : public Base {
public:
Derived();
public:
static std::array<double,bins[pNo]> particle_radii;
};
template <typename Base::Types pNo>
std::array<double,Base::bins[pNo]> Derived<pNo>::particle_radii;
错误:
error: conflicting declaration 'std::array<double,pNo->Base::bins.std::array<unsigned int,2>::operator[]()> Derived<pNo>::particle_radii'
23 | std::array<double,Base::bins[pNo]> Derived<pNo>::particle_radii;
note: previous declaration as 'std::array<double,2>::operator[]()> Derived<pNo>::particle_radii'
19 | static std::array<double,bins[pNo]> particle_radii;
这是 godbold 示例。
如果我将 std::array
更改为 POD 双精度数组,它可以正常编译。
有人能解释一下为什么这不是使用某些编译器编译的吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。