我刚才遇到了一个奇怪的问题。
源代码简单明了,不言而喻如下:
#include <vector>
#include <iostream>
#include <functional>
using namespace std;
using namespace std::tr1;
template<class T_>
void show_size(T_ coll)
{
cout << coll.size();
}
int main()
{
vector<int> coll;
coll.push_back(1);
show_size(ref(coll));
return 0;
}
VC ++ 2010报告:
错误C2039:'size':不是'std :: tr1 :: reference_wrapper&lt; _Ty&gt;'的成员
我们知道,reference_wrapper可以自动将自身转换为其基础类型,这里是vector<int>
。为什么这么简单的代码无效?
答案 0 :(得分:1)
不,这不是参考包装器的全部要点,因为它不会从引用中衰减,除非使用.get()
明确请求
编辑:不要将boost参考包装与标准包装混淆,增强实际上有隐式转换(但目标功能有点不同)