По некоторым причинам это не разрешено:
void foo(const std::istream& bar) { std::istreambuf_iterator<char> baz(bar); }
, но это разрешено:
void foo(const std::istream& bar) { std::istreambuf_iterator<char> baz(bar.rdbuf()); }
void foo(std::istream&& bar) { std::istreambuf_iterator<char> baz(bar); }
Похоже на причудливый выбор дизайна. Все, что istreambuf_iterator
делает, это манипулирует rdbuf()
, доступ к которому const
, но вы можете построить istreambuf_iterator
только из не const
istream
. В зависимости от того, что считается "мутированием istream
", не должно ли rdbuf()
быть не-const
или istreambuf_iterator
, чтобы взять const istream
?