Estou usando o MSVC 16 2019 com muitos avisos ativados, incluindo C4127: a expressão condicional é constante. No entanto, tenho um código que se parece com:
template <bool B>
void foo(int x) {
if (B && x == 0) { do_stuff(); }
do_other_stuff();
}
... e o aviso é acionado quando B é falso.
Quero manter esse erro em geral, mas não quero que ele avise gratuitamente quando a constância da expressão de condição for devida apenas à instanciação do modelo.
Nota: Esta questão está relacionada, mas - o código não vai mudar (significativamente), então não é isso que estou perguntando. Também não em C++ 17.
Você pode reformatar a função para
e agora
b
não é uma expressão constante, portanto o aviso não deve mais ser aplicado.Você pode desativar temporariamente o aviso para esse bloco de código, com uma diretiva #pragma, como também sugere Mark Ransom.
Consulte: https://learn.microsoft.com/en-us/cpp/preprocessor/warning?view=msvc-170