Почему этот самый простой код C ++ 0x недействителен? - PullRequest
1 голос
/ 30 ноября 2010

Я только что столкнулся со странной проблемой.

Исходный код прост и очевиден следующим образом:

#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: «размер»: не является членом «std :: tr1 :: reference_wrapper <_Ty>»

Как мы знаем, reference_wrapper может автоматически преобразовывать себя в свой базовый тип, здесьvector<int>Почему такой простой код недействителен?

1 Ответ

1 голос
/ 30 ноября 2010

Нет, это не может быть в этом вся суть обертки ссылки, потому что она не затухает из ссылки, если явно не запрошено с помощью .get()

Редактировать: не перепутать ссылку на повышениеОбертка со стандартным, у Boost фактически есть неявное преобразование (но функциональность цели немного отличается)

...