Parallel-hashmap:确定 C++ 版本

Parallel-hashmap: determining C++ version

我使用 parallel-hashmap 程序包构建了一个程序,该程序包取自 Visual Studio 2019 年的最新 vcpkg 并带有 stdcpplatest 标志(激活 C++20 标准)并获得错误

>C:\vcpkg\installed\x64-windows\include\parallel_hashmap\phmap_base.h(335,39): error C2039: 'result_of': is not a member of 'std'

代码如下

template< class F, class... ArgTypes>
#if __cplusplus >= 201703L
using invoke_result_t = typename std::invoke_result_t<F, ArgTypes...>;
#else
using invoke_result_t = typename std::result_of<F(ArgTypes...)>::type;
#endif

所以用#if __cplusplus >= 201703L判断是否存在result_of替换是不正确的。那么正确的做法是什么?

作为n。 'pronouns'米。在上面的评论中建议,必须将命令行选项 /Zc:__cplusplus 添加到 Visual Studio 编译器,这将为 __cplusplus 宏设置适当的值。

另一种选择是按如下方式编写支票:

#if (defined(_MSVC_LANG) && _MSVC_LANG >= 201703) || __cplusplus >= 201703

它将与 Visual Studio 和任何其他编译器兼容。