http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59813
--- Comment #1 from Nikolay Orliuk <virkony at gmail dot com> --- In 4.7.3 that code works, but changing it to void foo() { cout << "x" << endl; // ok cout << 'x' << endl; // kills tail-call elimination in gcc 4.8.2 struct {} bar; // kills tail-call elimination in 4.7.3 foo(); } Removing either "bar" or 'x' results in normal infinite loop. In 4.5.4 this works fine as is.