(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::Rinvoke_result_tinvoke_result_t没有成员::type (std::invoke_result<T, typename Qs::R...>::type::type)