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 和任何其他编译器兼容。
我使用 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 和任何其他编译器兼容。