首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >名称空间std没有成员std::invoke_result_t。

名称空间std没有成员std::invoke_result_t。
EN

Stack Overflow用户
提问于 2018-01-10 15:00:05
回答 1查看 3.7K关注 0票数 0

由于个人原因,我最近从MSVS切换到VS代码,我的编译器现在是最新的Clang。

我遇到了一些麻烦(例如,我不能编写typename O = ...,现在我必须编写typename O = typename ...),但它们都很小,而且很容易修复。除了一个。

我不知道原因,但编译器找不到std::invoke_result_tstd::invoke_result<>::type。这很恶心,特别是因为IntelliSense觉得很容易。

下面是错误日志:

代码语言:javascript
运行
复制
{"Workspace" directory}/Untitled-1.cpp:5:54: error: no template named 'invoke_result_t' in namespace 'std'; did you mean '_Invoke_result_t'?
template<typename I, typename FTy, typename O = std::invoke_result_t<std::function<FTy>, I>>
                                                ~~~~~^~~~~~~~~~~~~~~
                                                     _Invoke_result_t
{MSVS Installation directory}\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.12.25827\include\type_traits:1832:2: note: '_Invoke_result_t' declared here
        using _Invoke_result_t = typename _Invoke_traits<void, _Callable, _Args...>::type;
        ^
1 error generated.

如果我使用的是提供的std::_Invoke_result_t,而不是普通的,那么所有的东西都会编译并正常工作。

而且,每次我编译包含std::cout的代码时,编译器都会编写一些本地定义的符号(老实说,是_CxxThrowException和_std_terminate )导入到函数中。

有办法解决所有这些麻烦吗?其中哪些是bug,哪些是特性?我听说,VS C++库没有达到ISO标准,这可能是我遇到麻烦的原因吗?

EN

回答 1

Stack Overflow用户

发布于 2018-02-01 19:43:07

std::invoke_result是C++17的一部分,请确保编译器有-std=c++17选项。

另外,

代码语言:javascript
运行
复制
#include <type_traits>

如果您使用的是clang或旧版本的c++,请考虑使用std::result_of

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48190215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档