我正在使用 MSVC 16 2019,并打开了许多警告,包括 C4127:条件表达式是常量。但是,我的代码如下所示:
template <bool B>
void foo(int x) {
if (B && x == 0) { do_stuff(); }
do_other_stuff();
}
...当 B 为 false 时会触发警告。
我想一般保留这个错误,但我不希望它在条件表达式的常量性仅由于模板实例化时无缘无故地发出警告。
注意:这个问题是相关的,但是 - 代码不会(显着)改变,所以这不是我要问的。 C++17 中也没有。
您可以将函数重新格式化为
template <bool B>
void foo(int x) {
bool b = B;
if (b && x == 0) { do_stuff(); }
do_other_stuff();
}
现在
b
不是常量表达式,因此警告不应再适用。