Для затравки начнём с потоков.
Согласно стандарту, operator<< для функций-манипуляторов выглядит так:
basic_ostream<charT,traits>& operator<<
(basic_ostream<charT,traits>& (* pf)(basic_ostream<charT,traits>&));
Returns: pf(*this).
Что, вобщем не мешает возвращать
другой поток из манипулятора.
Таким образом код
ostream& mutatestream(ostream& s); // возвращает не s, а другой поток
cout << "some string" << mutatestream << "another string";
потенциально может вывести "another string" в другой поток.
Вопрос: регулирует ли стандарт такое поведение (я что-то не нашёл)? В любом случае, как по-вашему должно быть?
... << J 1.0 alpha 4 >>