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