Aviso do compilador C4984
'if constexpr' é uma extensão de linguagem C++17
Comentários
O compilador encontrou uma expressão if constexpr
no código compilado usando o padrão C++14. Essa expressão é especificada a partir do padrão C++17. Se você precisar de compatibilidade com o C++11 ou C++14, essa expressão não será portátil.
O C4984 é emitido como um erro por padrão, mas é suprimível. Para habilitar essa expressão compilando seu código como C++17, use o modo /std:c++17
ou posterior. Para usar a expressão if constexpr
no código compilado para C++14 como uma extensão da Microsoft, você pode suprimir, desabilitar ou alterar o nível de aviso da mensagem de erro. Você pode usar /wd4984 para desabilitar C4984 ou /wN4984 para habilitá-lo como um aviso de nível N em vez de um erro. Ou use #pragma warning(suppress:4984)
antes da linha que causa o aviso no arquivo de origem.
Este aviso está disponível a partir do Visual Studio 2017 versão 15.3. Para obter informações sobre como desabilitar avisos introduzidos em uma versão específica do compilador ou posterior, consulte avisos do compilador por versão do compilador.
Exemplo
Este exemplo gera C4984 e mostra maneiras de corrigi-lo:
// C4984.cpp
// compile with: cl /EHsc C4984.cpp
#include <iostream>
int main()
{
constexpr bool compile_time = true;
// Uncomment the following line or use /std:c++17 to fix
// #pragma warning(suppress:4984)
if constexpr (compile_time)
{
std::cout << "compile_time is true";
}
else
{
std::cout << "compile_time is false";
}
}