Ezt azért nem nevezném mellékhatásnak.
Ezzel az erővel a printf is csak egy void-ot állít elő. :)
A lényeg, hogy van nekünk egy ilyenünk (többek között):
std::ostream& operator<< (std::ostream& out, char* str);
Ez ha úgy tetszik egy közönséges fv.
A te sorod elejét írhatnád így is:
operator<< (std::cout, "Hello world");
Arról van szó, hogy elvégzel egy műveletet, majd az eredményül kapott objektumot visszaadod további felhasználásra. Én egyiket sem nevezném mellékhatásnak.
A te gondolatmeneted alapján a ++i utasítás mellékhatása, hogy növeli i értékét...
"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o