Avertissement du compilateur C4984
'if constexpr' est une extension de langage C++17
Notes
Le compilateur a trouvé une if constexpr
expression dans le code compilé à l’aide de la norme C++14 par défaut. Cette expression est spécifiée à partir de la norme C++17. Si vous avez besoin de la compatibilité C++11 ou C++14, cette expression n’est pas portable.
C4984 est émis en tant qu’erreur par défaut, mais il est supprimable. Pour activer cette expression en compilez votre code en C++17, utilisez /std:c++17
le mode ou une version ultérieure. Pour utiliser l’expression dans le if constexpr
code compilé pour C++14 en tant qu’extension Microsoft, vous pouvez supprimer, désactiver ou modifier le niveau d’avertissement du message d’erreur. Vous pouvez utiliser /wd4984 pour désactiver C4984 ou /wN4984 pour l’activer en tant qu’avertissement N de niveau au lieu d’une erreur. Vous pouvez également utiliser #pragma warning(suppress:4984)
avant la ligne qui provoque l’avertissement dans votre fichier source.
Cet avertissement est disponible à partir de Visual Studio 2017 version 15.3. Pour plus d’informations sur la désactivation des avertissements introduits dans une version particulière du compilateur ou une version ultérieure, consultez Avertissements du compilateur par version du compilateur.
Exemple
Cet exemple génère l’erreur C4984 et montre comment le corriger :
// 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";
}
}