Avviso del compilatore C4984

'if constexpr' è un'estensione del linguaggio C++17

Osservazioni:

Il compilatore ha trovato un'espressione if constexpr nel codice compilato usando lo standard C++14 predefinito. Questa espressione viene specificata a partire dallo standard C++17. Se è necessaria la compatibilità C++11 o C++14, questa espressione non è portabile.

C4984 viene generato come errore per impostazione predefinita, ma è soppressibile. Per abilitare questa espressione compilando il codice come C++17, usare la /std:c++17 modalità o versione successiva. Per usare l'espressione if constexpr nel codice compilato per C++14 come estensione Microsoft, è possibile eliminare, disabilitare o modificare il livello di avviso del messaggio di errore. È possibile usare /wd4984 per disabilitare C4984 o /wN4984 per abilitarlo come avviso di livello N anziché come errore. In alternativa, usare #pragma warning(suppress:4984) prima della riga che causa l'avviso nel file di origine.

Questo avviso è disponibile a partire da Visual Studio 2017 versione 15.3. Per informazioni su come disabilitare gli avvisi introdotti in una determinata versione del compilatore o versioni successive, vedere Avvisi del compilatore per versione del compilatore.

Esempio

Questo esempio genera l'errore C4984 e mostra i modi per risolverlo:

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