(C++) Visual Studio 2019 - std::std::_Invoke_traits_nonzero 没有 'type' 成员
(C++) Visual Studio 2019 - std::std::_Invoke_traits_nonzero has no 'type' member
我有一个结构 Foo
,它接受模板 T
lambda 函数和 ...Qs
其他 Foo
。在这个 Foo
结构中,我将 R
定义为 using R = std::invoke_result_t<T, typename Qs::R...>
.
整个代码如下所示:
#include <type_traits>
template<typename T, typename ...Qs>
struct Foo
{
using R = std::invoke_result_t<T, typename Qs::R...>;
Foo(T t, Qs ...qs) {}
};
int main(int argc, char *argv[])
{
auto f1 = Foo([] { return 4; });
auto f2 = Foo([] { return 6; }, f1);
return 0;
}
如果在 main 中我只使用 f1
,它会编译,但是当我添加第二行(auto f2 = ...
)时,编译器开始抱怨以下错误:
error C2794: 'type': is not a member of any direct or indirect base class of 'std::_Invoke_traits_nonzero<void,T,int>'
with
[
T=main::<lambda_4b41af0c8bf71ed9014846a5c48d3ef2>
]
message : see reference to alias template instantiation 'std::invoke_result_t<main::<lambda_4b41af0c8bf71ed9014846a5c48d3ef2>,int>' being compiled
message : see reference to class template instantiation 'Foo<main::<lambda_4b41af0c8bf71ed9014846a5c48d3ef2>,Foo<main::<lambda_31970e658595f43034db3e80ee15a00d>>>' being compiled
error C2938: 'std::invoke_result_t' : Failed to specialize alias template
我正在使用 Visual Studion 2019 和 ISO C++ 17(这是我在项目中更改的唯一配置)。有人知道我做错了什么吗?
谢谢。
我猜你希望
using R = std::invoke_result<T, typename Qs::R...>;
展开后的std::invoke_result_t
是
using R = std::invoke_result<T, typename Qs::R...>::type;
Qs::R
是invoke_result_t
,invoke_result_t
没有成员::type
(std::invoke_result<T, typename Qs::R...>::type::type
)
我有一个结构 Foo
,它接受模板 T
lambda 函数和 ...Qs
其他 Foo
。在这个 Foo
结构中,我将 R
定义为 using R = std::invoke_result_t<T, typename Qs::R...>
.
整个代码如下所示:
#include <type_traits>
template<typename T, typename ...Qs>
struct Foo
{
using R = std::invoke_result_t<T, typename Qs::R...>;
Foo(T t, Qs ...qs) {}
};
int main(int argc, char *argv[])
{
auto f1 = Foo([] { return 4; });
auto f2 = Foo([] { return 6; }, f1);
return 0;
}
如果在 main 中我只使用 f1
,它会编译,但是当我添加第二行(auto f2 = ...
)时,编译器开始抱怨以下错误:
error C2794: 'type': is not a member of any direct or indirect base class of 'std::_Invoke_traits_nonzero<void,T,int>'
with
[
T=main::<lambda_4b41af0c8bf71ed9014846a5c48d3ef2>
]
message : see reference to alias template instantiation 'std::invoke_result_t<main::<lambda_4b41af0c8bf71ed9014846a5c48d3ef2>,int>' being compiled
message : see reference to class template instantiation 'Foo<main::<lambda_4b41af0c8bf71ed9014846a5c48d3ef2>,Foo<main::<lambda_31970e658595f43034db3e80ee15a00d>>>' being compiled
error C2938: 'std::invoke_result_t' : Failed to specialize alias template
我正在使用 Visual Studion 2019 和 ISO C++ 17(这是我在项目中更改的唯一配置)。有人知道我做错了什么吗?
谢谢。
我猜你希望
using R = std::invoke_result<T, typename Qs::R...>;
展开后的std::invoke_result_t
是
using R = std::invoke_result<T, typename Qs::R...>::type;
Qs::R
是invoke_result_t
,invoke_result_t
没有成员::type
(std::invoke_result<T, typename Qs::R...>::type::type
)