C++11 лажа?
Я хоть уже всё и забыл, но что то не врублюсь в проблему. Всё работает как и должно при чём тут оптимизация?
Вы правы, вы не поняли проблему.
Попробую разжевать.
Вызываем функцию ddd(). Эта функция создаёт объект типа DDD, поместив его в стек этой функции в качестве неименованного временного значения (unnamed temporary). Функция должна вернуть объект типа DDD по значению (by-value), соответственно, объект должен быть скопирован из неименованного временного значения в возвращаемое значение. Так бы поступил какой-нибудь древний компилятор. Современный компилятор (c++11 с семантикой перемещения) видит, что это самое неименованное временное значение нигде больше в функции ddd() не используется, поэтому этот компилятор может сгенерировать код перемещения объекта из временного значения во возвращаемое. Это и есть оптимизация (возможный её вариант). Таким образом возвращаются контейнеры стандартной библиотеки, например. Т.о. автор вопроса ожидал в этом случае увидеть вызов либо конструктора копирования (без оптимизации), либо конструктора перемещения (с оптимизацией по перемещению).
Но как я уже приводил выше, стандарт разрешает полностью исключать вызовы конструкторов копирования или перемещения в рамках RVO. В этом случае объект создаётся напрямую в стеке вызывающей функции, без создания неименованного временного значения, без копирования и перемещения.
Можете хотя бы на Википедии коротко про это почитать.