Advertencia del compilador C4984
"if constexpr" es una extensión del lenguaje C++17
Comentarios
El compilador encontró una expresión if constexpr
en el código compilado mediante el estándar predeterminado de C++14. Esta expresión se especifica a partir del estándar de C++17. Si necesita compatibilidad con C++11 o C++14, esta expresión no es portátil.
C4984 se emite como un error de manera predeterminada, pero se puede suprimir. Para habilitar esta expresión mediante la compilación del código como C++17, use el modo /std:c++17
o posterior. Para usar la expresión if constexpr
en el código compilado para C++14 como extensión de Microsoft, puede suprimir, deshabilitar o cambiar el nivel de advertencia del mensaje de error. Puede usar /wd4984 para deshabilitar la advertencia C4984, o bien /wN4984 para habilitarla como una advertencia de nivel N en lugar de un error. O bien, use #pragma warning(suppress:4984)
antes de la línea que provoca la advertencia en el archivo de origen.
Esta advertencia está disponible a partir de la versión 15.3 de Visual Studio 2017. Si desea obtener información sobre cómo deshabilitar las advertencias introducidas en una versión determinada del compilador o una versión posterior, consulte Advertencias del compilador por versión del compilador.
Ejemplo
Este ejemplo genera la advertencia C4984 y muestra maneras de corregirla:
// 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";
}
}