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 likeA 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.