In c++11, aggregate initialization was introduced to use initializer_list to init class types.

struct D
{
    string name;
    int v;
};

int main()
{
    D d{"dd", 4};
    cout << d.i<< endl;
}

The trick it didn’t allow inheritance for the initialization. In c++17, that was resolved by using nested aggregate extension

struct D
{
    string name;
    int v;
};

struct DD : D
{
    float f;
};

int main()
{
    DD d{{"dd", 4}, 1.1};

    cout << d.f << endl;
}