В следующем коде 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;
}
Сообщение об ошибке говорит вам, что реальная проблема заключается в том, что у ссылочной оболочки нет конструктора по умолчанию. Вы Можно назначить одну ссылочную оболочку другой, но вы не можете сначала создать «пустую» ссылочную оболочку и затем дать ему значение через присваивание.
reference_wrapper, как следует из его имени, должен ссылаться на некоторый объект. Так что у него нет конструктора по умолчанию.