Hey,

Been wondering. To use emplace_back or emplace, or try_emplace, one needs a constructor obviously that can be called. Now if I have a trivial struct, like

struct Trivial {
    int x;
    double y;
    std::string z;
};

I have to write my own constructor to be able to use *emplace*, even though it is kinda trivial, what I mean when I write:

std::vector<Trivial> t;
t.emplace_back(1, 2.0, "blah");

So what if, to make this possible, the following feature would be added:

struct Trivial {
    Trivial(auto&&...) = default;

    int x;
    double y;
    std::string z;
};

which would be equivalent to

struct Trivial {
    Trivial(auto&& ax, auto&& ay, auto&& az)
        : x(std::forward<decltype(ax)>(ax))
        , y(std::forward<decltype(ay)>(ay))
        , z(std::forward<decltype(az)>(az)) {}


    int x;
    double y;
    std::string z;
};

"similarly" to a default constructor.

I admit I haven't thought through all the potential problems with such a construct.

Thanks,
   Gergely