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";
    }
}