Udostępnij za pośrednictwem


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