Предупреждение компилятора 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";
}
}