The main reason that streams may cause an issue is internationalization.
Whenever you need to generate text with dynamic content in a couple different languages, things get awry because each language has its own grammar rules. For example, in English you would use:
void print(std::ostream& out, int i) {
out << "You retrieved ";
switch(i) {
case 0: out << "no file."; return;
case 1: out << "1 file."; return;
default: out << i << " files." return;
}
And that's great right ?
So when you translate to French, you simply decide to move all those 4 sentences parts in a table in which you will look them up by key, and it works!
And then you discover Polish, from the gettext
documentation, here are the plural forms of file (plik):
1 => plik
2,3,4 => pliki
5-21 => pliko'w
22-24 => pliki
25-31 => pliko'w
Hum... suddenly things are getting difficult, right ?
Actually, it can get worse. Not all languages need to place your dynamic entries in the same order!
This is why streams cannot actually be used for internationalized text short of writing an overloadable C++ function for each text to display, and have the translators provide the overloads! Hum...
There are pros and cons for both, Google Style Guide is just very opinionated to ensure consistency as much as possible.