C++ 模板成员函数错误:clang不';不匹配任何成员函数

C++ 模板成员函数错误:clang不';不匹配任何成员函数,c++,templates,c++11,clang,C++,Templates,C++11,Clang,我已经编写了以下模板成员函数,但如果编译器不出错,我无法调用它: template <class T, class A> auto tpool::enqueue(T&& func, std::vector<A>&& args) -> std::vector<std::future<decltype(std::forward<T>(func)(decltype(std::forward<A(args))::

我已经编写了以下模板成员函数,但如果编译器不出错,我无法调用它:

template <class T, class A>
auto tpool::enqueue(T&& func, std::vector<A>&& args)
-> std::vector<std::future<decltype(std::forward<T>(func)(decltype(std::forward<A(args))::value_type))>>
{
    //...
}

tpool tp();
auto f = [] (int) { /* ... */ };
std::vector<int> args; 

tp.enqueue(f, args);
模板
自动tpool::enqueue(T&&func、std::vector&&args)
->向量
args
是一个左值,因此将忽略候选者

请注意,
T&&func
允许绑定左值,因为模板替换可以允许
T
本身是左值引用,我们就有了
(T&)&&==T&
。但是使用
args
,这是不可能的,因为无论
A
是什么,
std::vector&&
始终是向量的右值引用


如果您不打算复制或修改
参数
,您可以传递常量引用:

template <class T, class A>
auto tpool::enqueue(T&& func, const std::vector<A>& args)

通过
tpool tp()你的意思是
tpool-tp?这里有几个语法错误<代码>标准::转发
template <class T, class A>
auto tpool::enqueue(T&& func, std::vector<A>&& args)
std::vector<int> args; 
tp.enqueue(f, args);
template <class T, class A>
auto tpool::enqueue(T&& func, const std::vector<A>& args)
template <class T, class V>
auto tpool::enqueue(T&& func, V&& args)
    -> std::vector<std::future<decltype(func(args.front()))>>