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