Reference_wrapper: Push_back работает, но не присваивает

В следующем коде push_back() std::ref в std::vector<reference_wrapper<Type>> хорошо работает, однако, присваивая std::ref к reference_wrapper<Type> не работает. Зачем?

#include <iostream>
#include <vector>
#include <functional>
using namespace std;

struct Type {};

int main()
{
    Type t1;

    vector<reference_wrapper<Type>> t2;
    t2.push_back( ref(t1) ); // OK

    //reference_wrapper<Type> t3; // error: no matching function for call to std::reference_wrapper<Type>::reference_wrapper()’
    //t3 = ref(t1);

    return 0;
}

2 ответа

Решение

Сообщение об ошибке говорит о том, что реальная проблема заключается в том, что у ссылочной оболочки нет конструктора по умолчанию. Вы можете назначить одну ссылочную оболочку другой, но вы не можете сначала создать "пустую" ссылочную оболочку, а затем присвоить ей значение посредством присваивания.

reference_wrapper, как следует из его имени, должен ссылаться на некоторый объект. Так что у него нет конструктора по умолчанию.

Другие вопросы по тегам