1
以下代码与Clang(3.9.1测试)和GCC(6.3测试)一起编译,如此链接所示:https://godbolt.org/g/kO1nBa。但是,MSVC(19.00.24215.1测试)未能编译:参考基类的constexpr构造函数在编译器之间有所不同
struct ValueWitnessTable {
int size;
};
struct ExtraInhabitantsValueWitnessTable : ValueWitnessTable {
constexpr ExtraInhabitantsValueWitnessTable(const ValueWitnessTable &base) : ValueWitnessTable(base) {}
};
struct ValueWitnessTableGenerator {
static constexpr const ExtraInhabitantsValueWitnessTable table = { { 1 } };
};
int main() {}
错误C2131:表达式的结果不是一个常数
注:故障是由赋值操作的评估造成
注:在评价'ExtraInhabitantsValueWitnessTable :: ExtraInhabitantsValueWitnessTable(ExtraInhabitantsValueWitnessTable {ValueWitnessTable {(空)}},{ValueWitnessTable大小= 1})
这里发生了什么 - 标准是否允许这样做?这是一个C++ 17功能吗?
另外,我将如何解决这个问题?我需要基于成员的初始化基类的行为(因为我忽略了一些涉及宏等的内容)。
引用自cppreference:选择初始化非静态成员和基类的每个构造函数都必须是constexpr构造函数。因为C++ 14 – felix
@felix很好知道 - 随时回答,如果你想!你知道我可以如何解决MSVC的这个限制吗? –