为什么这个最简单的C ++ 0x代码无效?

时间:2010-11-30 16:04:25

标签: c++11 ref

我刚才遇到了一个奇怪的问题。

源代码简单明了,不言而喻如下:

#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>。为什么这么简单的代码无效?

1 个答案:

答案 0 :(得分:1)

不,这不是参考包装器的全部要点,因为它不会从引用中衰减,除非使用.get()明确请求

编辑:不要将boost参考包装与标准包装混淆,增强实际上有隐式转换(但目标功能有点不同)