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;
}