Ответ 1
См. здесь - ранняя реализация NRVO путем явного определения именованного значения return в заголовке функции.
Поддержка NRVO без этого расширения была добавлена здесь - Серия выпусков GCC 3.1.
Краткая вырезка и вставка для контекста:
g++ теперь поддерживает "named return оптимизация значений": для кода типа
A f () { A a; ... return a; }
g++ будет выделять a в обратном слот значения, так что возврат будет нет-op. Чтобы это сработало, все возвращаются утверждения в функции должны возвращаться одна и та же переменная.