Почему я могу создать istreambuf_iterator из const istream с помощью rdbuf ()? - PullRequest
3 голосов
/ 17 февраля 2020

По некоторым причинам это не разрешено:

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?

...