C++ 如何使用c++;20标准::是否在Visual C中计算为常数++;2019社区?

C++ 如何使用c++;20标准::是否在Visual C中计算为常数++;2019社区?,c++,visual-c++,std,c++20,C++,Visual C++,Std,C++20,MS claim to support在其头上进行了“consant”评估,其头中确实包含一个实现,由“if”HAS“CXX20”保护 看起来,(至少在MSVC社区16.6.5中)/std:c++最新版本并没有导致定义_HAS CXX20。用户界面不提供/std:c++20选项 e、 g 请注意,使用is_constant_evaluated会产生错误,而静态_断言不会产生错误 我遗漏了什么?我无法重现您的错误,它对我很好,CXX20设置正确。并且是常数吗\u求值工作正常 std::cout &

MS claim to support在其头上进行了“consant”评估,其头中确实包含一个实现,由“if”HAS“CXX20”保护

看起来,(至少在MSVC社区16.6.5中)/std:c++最新版本并没有导致定义_HAS CXX20。用户界面不提供/std:c++20选项

e、 g

请注意,使用is_constant_evaluated会产生错误,而静态_断言不会产生错误


我遗漏了什么?

我无法重现您的错误,它对我很好,CXX20设置正确。并且
是常数吗\u求值
工作正常

std::cout << _HAS_CXX20;
我的版本详细信息:

希望能有帮助


无论如何,如果
\u内置函数是常数的(
有效,只需将
\u HAS\u CXX20
定义为1,问题就解决了。

“看起来(至少在MSVC社区16.6.5中)/std:c++最新版本并没有导致\u HAS\u CXX20”-您根据什么提出这个说法?要具体。您是否尝试过一个简单的程序,该程序说,
#如果def_HAS_CXX20 std::cout Fair point,那么_HAS_CXX20可能只会在stdlib头中定义。我会添加一个例子。你是否通过安装程序安装了VisualC++的更新?FWIW,实现只将一个调用封装为了?DanGroom可以肯定的是,我的实现
#if(u HAS)cx20//函数是(u constant)(u evaluated)NODISCARD constexpr bool是(u constant)(u evaluated)noexcept{return u(u)内置(u constant)u evaluated))是(u constant((u evaluated))。和
是否为常量\u评估值
工作正常。@DanGroom,我在回答中公布了我的设置细节,也许你可以发现差异,如果你需要更多细节,请告诉我。我想我一定是在更改一个构建配置的std设置,然后使用另一个构建,因为当我确保UI为所有配置和所有平台设置属性时,它会按照您所描述的那样工作。再次感谢您抽出时间!
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 ==========
std::cout << _HAS_CXX20;