【发布时间】:2020-11-26 18:22:45
【问题描述】:
MS 声称在他们的conformance page 上支持 is_consant_evaluated,并且他们的
似乎(至少在 MSVC 社区 16.6.5 中)/std:c++latest 不会导致定义 _HAS_CXX20。 UI 不提供 /std:c++20 选项。
例如
#include <type_traits>
static_assert( std::is_constant_evaluated(), "" );
#ifdef _HAS_CXX20
static_assert(false, "");
#endif
给出以下输出:
1>ConsoleApplication7.cpp
1>ConsoleApplication7.cpp(3,21): error C2039: 'is_constant_evaluated': is not a member of 'std'
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.26.28801\include\type_traits(20): message : see declaration of 'std'
1>ConsoleApplication7.cpp(3,42): error C3861: 'is_constant_evaluated': identifier not found
1>ConsoleApplication7.cpp(5,15): error C2338:
1>Done building project "ConsoleApplication7.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
请注意,使用 is_constant_evaluated 会产生错误,而 static_assert 不会。
我错过了什么?
【问题讨论】:
-
“似乎(至少在 MSVC 社区 16.6.5 中)/std:c++latest 不会导致 _HAS_CXX20”——您提出此主张的依据是什么?是具体的。您是否尝试过一个简单的程序,例如
#ifdef _HAS_CXX20 std::cout << "_HAS_CXX20\n" #endif? -
公平点,可能 _HAS_CXX20 无论如何只能在 stdlib 头文件中定义。我将添加一个示例。
-
您是否通过安装程序安装了 Visual C++ 的更新?
标签: c++ visual-c++ std c++20