【发布时间】:2011-12-02 11:02:03
【问题描述】:
在右值引用简介中,提出了完美转发作为将右值 5 转发到具有非常量引用参数的构造函数的理想解决方案。
但是:
#include <memory>
#include <iostream>
#include <utility>
template <class T, class A1>
std::shared_ptr<T> factory(A1&& a1) {
return std::shared_ptr<T>(new T(std::forward<A1>(a1)));
}
class X {
public:
X(int& i){
std::cout<<"X("<<i<<")\n";
}
};
int main() {
std::shared_ptr<X> p = factory<X>(5);
}
在 XCode 4.2 和 G++ 4.6.1 中使用 no known conversion from int to int& 失败,而:
template <class T, class A1>
std::shared_ptr<T> factory(A1&& a1) {
return std::shared_ptr<T>(new T(/*no forwarding*/a1));
}
编译。我做错了什么?
【问题讨论】:
标签: c++ c++11 perfect-forwarding