Hi,

unless I am missing something, the problem with optimal object construction with user-defined constructor is still unsolved in your proposal.
I.e.
when we have an aggregate:
struct Foo
{
    Bar1 a;
    Bar2 b;
};

Following expression is optimal w.r.t. construction (no copy/moves for Bar1/Bar2) thanks to aggregate initialization:
Foo f = { Bar1{...}, Bar2{...} }; // #1


But if user-defined constructor is provided, then there is no way to achieve optimal construction with same initialization expression as in #1.

struct Foo
{
   Foo(Bar1 a, Bar2 b)  #2
    : a(std::move(a)), b(std::move(b))
   {}

   Foo(const Bar&1 a, const Bar2& b) #3
    : a(a), b(b)
   {}

   Bar1 a;
   Bar2 b;
};
You get a temporary construction, and either move(#2) or copy(#3) + temporary destruction.

Ultimate copy ellision, should relax rules of copy elision so that any copy/moves of constructor arguments into object members/bases is allowed as well.
So that the most simple constructor definition is always optimal:

struct Foo
{
   Foo(Bar1 a, Bar2 b)
    : a(a), b(b)
   {}

   Bar1 a;
   Bar2 b;
};

Regards,
Maciej