В этом вопросе мы узнали, что RVO нельзя применять к выражению типа p.first
.
В комментариях также было высказано предположение, что RVO обычно не применяется к выражению типа r
после объявления типа auto& r = p.first
. Менее ясно, соответствует ли стандарт этому поведению.
в операторе return в функции с типом возвращаемого класса, когда выражение представляет собой имя энергонезависимого автоматического объекта (кроме параметра функции или переменной, введенной исключающим - объявление обработчика ([except.handle])) с тем же типом (игнорируя cv-qualification) в качестве возвращаемого типа функции, операцию копирования/перемещения можно опустить, построив автоматический объект непосредственно в возвращаемое значение функции
В следующем коде указано r
имя объекта, также известного как o
, до тех пор, пока RVO допустимо, если оно выражает выражение в выражении return
?
int o = 42;
int& r = o;