Здравствуйте, Максим Рогожин, Вы писали:
МР>Для чего запрещать конструктору возвращать даже void, но при этом разрешать следующий синтаксис?
МР>class A {
МР>public:
МР> A(int);
МР>};
МР>A obj = A(1024);
А почему этот синтаксис надо запрещать? Вы тут создали безымянный объект типа A и затем скопировали его в obj. Это другое, чем просто написать
A obj(1024);.
Компилятор, скорее всего, соптимизирует это в простую инициализацию (если ему не запретить созданием своих конструкторов копирования и перемещения, или введением в A нетривиальных полей), но это не меняет, что изначально это разные вещи.