Das Ding ist, dass der Compiler bei nem Integer schlau genug ist, auch einfach nen inc daraus zu generieren ohne temporäre Resultvariable. Das ist bei operator overloading leider nicht der Fall - Stichwort
Return value optimization (beziehungsweise das Fehlen eben dieser).