I accidentally put the opening brace of my function definition after the return statement
int id(int k) return k; { }
But GCC answered with a w
See here - early NRVO implementation by explicit definition of the named return value in the function header.
Native support for NRVO without this extension was added here - GCC 3.1 Release Series.
Brief cut and paste for context:
G++ now supports the "named return value optimization": for code like
A f () { A a; ... return a; }
G++ will allocate a in the return value slot, so that the return becomes a no-op. For this to work, all return statements in the function must return the same variable.