Возможно, я задаю глупый вопрос, но я посмотрел страницу википедии для RVO здесь и не смог остановиться интересно, является ли это поведение неправильным. Я попробовал это на своей машине, и RVO полностью включился, несмотря на уровень оптимизации. Что, если в конструкторе действительно происходит что-то БОЛЬШОЕ? Я знаю, что не должно, но что, если? Я не могу понять, почему RVO все еще происходит, когда в конструкторе есть побочные эффекты.
РЕДАКТИРОВАТЬ: -fno-elide-constructors
кажется, останавливает RVO. Но вопрос остается.
EDIT2: А если серьезно, то сколько людей знают о чем-то подобном? Это может быть в стандарте, но это все еще очень уродливая функция, как я ее вижу. По крайней мере, компиляторы должны отключить его по умолчанию и предоставить переключатель для людей, которые знают об этом. :)
РЕДАКТИРОВАТЬ 3: Я все еще настаиваю на том, что это действительно плохо. :). Я не думаю, что знаю какое-либо другое языковое ограничение, подобное этому, которое напрямую противоречит синтаксису языка. Все остальное выдает либо ошибки компилятора, либо компоновщика, верно?