Ostrzeżenie kompilatora C4984
"if constexpr" to rozszerzenie języka C++17
Uwagi
Kompilator znalazł if constexpr
wyrażenie w kodzie skompilowanym przy użyciu domyślnego standardu C++14. To wyrażenie jest określane począwszy od standardu C++17. Jeśli potrzebujesz zgodności ze standardem C++11 lub C++14, to wyrażenie nie jest przenośne.
C4984 jest domyślnie wystawiany jako błąd, ale jest pomijalny. Aby włączyć to wyrażenie, kompilując kod jako C++17, użyj /std:c++17
trybu lub nowszego. Aby użyć if constexpr
wyrażenia w kodzie skompilowanym dla języka C++14 jako rozszerzenia firmy Microsoft, możesz pominąć, wyłączyć lub zmienić poziom ostrzeżenia komunikatu o błędzie. Można użyć /wd4984, aby wyłączyć C4984 lub /wN4984 , aby włączyć go jako ostrzeżenie poziomu N zamiast błędu. Możesz też użyć polecenia #pragma warning(suppress:4984)
przed wierszem, który powoduje ostrzeżenie w pliku źródłowym.
To ostrzeżenie jest dostępne od wersji 15.3 programu Visual Studio 2017. Aby uzyskać informacje na temat wyłączania ostrzeżeń wprowadzonych w określonej wersji kompilatora lub nowszej, zobacz Ostrzeżenia kompilatora według wersji kompilatora.
Przykład
Ten przykład generuje kod C4984 i pokazuje sposoby jego naprawy:
// 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";
}
}