Potrebbe essere più facile capire cosa sta succedendo se si guarda alla catena di chiamate di funzioni a cui il secondo si rivolge (sto usando l'operatore defs qui , che corrispondono alle intestazioni gcc sul mio sistema):
cout << b << " " << ink(a) << " " << b;
operator<<(operator<<(cout.operator<<(b)," ").operator<<(ink(a)), " ").operator<<(b);
A parte questo sembra molto strano perché gli inserter numerici sono tutti metodi dell'oggetto, mentre gli inserters di stringa di caratteri sono tutte funzioni globali, il che rende l'ordine delle chiamate ancora più strano di quanto potrebbe essere.
Ora che hai l'effettiva catena di chiamate, puoi vedere come finirebbe a mettere il 7 in pila prima della chiamata 'inchiostro', ma in realtà non lo useremo fino a molto tempo fa, causando così il non-intuitivo uscite.