Почему std :: reference_wrapper неявно приводится к ссылке при вызове функции-члена? [Дубликат]

На этот вопрос уже есть ответ:

Как правильно использовать std :: reference_wrappers 1 ответ

Я не понимаю, почему нельзя использоватьstd::reference_wrapper так

#include <vector>
#include <functional>

struct Foo
{
    void f() {};
};

int main()
{
    std::vector<std::reference_wrapper<Foo>> vrFoo;
    Foo foo;
    vrFoo.push_back(foo);
    // vrFoo[0].f(); // error
    vrFoo[0].get().f(); // or static_cast<Foo&>(v[0]).f();
}

Почему мы должны использоватьget() функция-член? Это выглядит какstd::reference_wrapper имеет неявное преобразование вT& с помощьюoperator T&() const noexcept, видетьhttp: //en.cppreference.com/w/cpp/utility/functional/reference_wrappe так почему неv[0] неявно преобразуется в ссылку?

В других ситуациях, таких как

std::cout << v[0] << std::endl

это преобразование происходит (я предполагаю, чтоFoo перегрузкиoperator<<)

Ответы на вопрос(2)

Ваш ответ на вопрос