我可以让 MSVC 对“C4127:条件表达式为常量”不那么严格吗

ein*_*ica 2 c++ compiler-warnings c++11 c4127 visual-studio-2019

我正在使用 MSVC 16 2019,并打开了许多警告,包括 C4127:条件表达式是常量。但是,我的代码如下所示:

template <bool B>
void foo(int x) {
    if (B && x == 0) { do_stuff(); }
    do_other_stuff();
}
Run Code Online (Sandbox Code Playgroud)

...当 B 为 false 时会触发警告。

我想一般保留此错误,但我不希望它在条件表达式的常量性仅由于模板实例化时无缘无故地发出警告。

注意:这个问题是相关的,但是 - 代码不会(显着)改变,所以这不是我要问的。C++17 中也没有。

Nat*_*ica 5

您可以将函数重新格式化为

template <bool B>
void foo(int x) {
    // Doing this to remove B triggering a constant condition warning when B is false
    // future: replace with if constexpr in C++17+
    bool b = B;
    if (b && x == 0) { do_stuff(); }
    do_other_stuff();
}
Run Code Online (Sandbox Code Playgroud)

and nowb不是常量表达式,因此警告不应再适用。