Я знаю, что std :: ref (объект) создает std :: reference_wrapper (объект), и что std :: reference_wrapper имеет неявную функцию-член оператора преобразования типов
operator T&() const
и Я знаю, что это влияет на то, как я использую его, когда в игру вступает вывод параметров шаблона: поэтому в Print ниже тип T аргумента выводится как std :: reference_wrapper, если я вызываю его, скажем, std :: ref ("hello ")
template <class T>
void Print(T t)
{
std::cout << t << std::end;
}
Почему эта строка не компилируется?
std::string s = "hello";
std::cout << std::reference_wrapper<std::string>(s) << std::endl;
конкретизированная специализация должна иметь функцию преобразования типа
operator std::string&() const
, так почему я использую справочную обертку, как это?