简单的问题,为什么以下工作不起作用(暗示 的副本ci
)?
#include <utility>
int main(){
const int ci = 2;
std::forward<int>(ci);
}
prog.cpp:在函数'int main()'中:
prog.cpp:6:23:错误:没有匹配函数调用'forward(const int&)'
在编写一些模板内容时,问题就表现出来了,我有一个简单的持有人类型,如下所示。为了避免不必要的复制,我尽可能使用完美转发,但这似乎是问题的根源。
template<class T>
struct holder{
T value;
holder(T&& val)
: value(std::forward<T>(val))
{}
};
template<class T>
holder<T> hold(T&& val){
// T will be deduced as int, because literal `5` is a prvalue
// which can be bound to `int&&`
return holder<T>(std::forward<T>(val));
}
template<class T>
void foo(holder<T> const& h)
{
std::tuple<T> t; // contrived, actual function takes more parameters
std::get<0>(t) = std::forward<T>(h.value); // h.value is `const T`
}
int main(){
foo(hold(5));
}
如果需要任何进一步的信息,请告诉我。
非常感谢任何解决此问题的想法。