Поделиться через


Предупреждение компилятора C4984

"if constexpr" является расширением языка C++17

Замечания

Компилятор нашел выражение в коде if constexpr , скомпилированном с помощью стандарта C++14 по умолчанию. Это выражение указывается начиная со стандарта C++17. Если требуется совместимость C++11 или C++14, это выражение не переносимо.

C4984 выдается как ошибка по умолчанию, но она подавляется. Чтобы включить это выражение, скомпилируя код как C++17, используйте /std:c++17 режим или более позднюю версию. Чтобы использовать выражение в коде, скомпилированном if constexpr для C++14 в качестве расширения Майкрософт, можно отключить, отключить или изменить уровень предупреждения сообщения об ошибке. Вы можете использовать /wd4984 для отключения C4984 или /wN 4984, чтобы включить его как предупреждение уровня N вместо ошибки. Кроме того, используйте #pragma warning(suppress:4984) перед строкой, которая вызывает предупреждение в исходном файле.

Это предупреждение доступно начиная с Visual Studio 2017 версии 15.3. Сведения об отключении предупреждений, представленных в определенной версии компилятора или более поздней версии, см. в разделе "Предупреждения компилятора" по версии компилятора.

Пример

В этом примере создается C4984 и показаны способы ее устранения:

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