У меня есть класс, который обтекает std::string
для обеспечения форматирования:
struct Wrap {
std::string& s; // need const ref for output, non const for input
friend std::ostream& operator<< (std::ostream& os, const Wrap& w) {
os << "[" << w.s << "]";
return os;
}
friend std::istream& operator>> (std::istream& is, Wrap&& w) {
Is >> ......;
return is;
}
};
И с выводом все в порядке:
my_ostream << Wrap{some_string};
Потому что привязка временного переноса к const ref в порядке.
Но менее хорошо с вводом:
my_istream >> Wrap{some_string}; // doesn't compile - cannot bind lvalue to rvalue
Я, вероятно, собираю его, но так как я не видел >> &&
, то что-то не так.
Является ли >>&&
запрещенным или каким-либо злом?