【发布时间】:2019-10-28 04:10:26
【问题描述】:
我有这个代码:
constexpr int log2(const unsigned int x) {
return x < 4 ? 1 : 1 + log2(x / 2);
}
int main() {
bitset<log2(2)> foo;
int bar[log2(8)];
cout << log2(8) << endl;
}
这在 gcc 中运行良好:https://ideone.com/KooxoS
但是当我尝试visual-studio-2017 时,我得到了这些错误:
错误 C2975:
_Bits:std::bitset的模板参数无效,预期的编译时常量表达式
注意:见_Bits的声明
错误 C2131:表达式未计算为常量
注意:失败是由于调用了未定义的函数或未声明的函数constexpr
注意:查看log2的用法
显然log2 是constexpr,所以我认为这只是visual-studio-2017 中的一个错误。有没有办法解决这个错误?
【问题讨论】:
-
看起来像视觉工作室问题。尝试使用 Visual Studio 2019,因为它们在标准合规性方面通常稍有落后。
-
如果我将其重命名为 log22(或 Log2),它会在 VS2017 中编译,我得到的只是
warning C4101: 'bar': unreferenced local variable,输出打印为 3。看起来它选择了一个不是 constexpr 的标准库? -
@NathanOliver 这是一个糟糕的重复我可以在本地得到相同的编译错误没有
using namespace std;。 -
@FrançoisAndrieux 因为the whole situation is an absolute mess。另见stackoverflow.com/questions/11085916/…
-
@Borgleader 很棒的评论。就是这个问题,谢谢。我很快就会接受其中一个答案。
标签: visual-studio-2017 visual-studio-2017 c++ c++11 visual-studio-2017 constexpr compile-time-constant