Рассмотрим следующий код:
#include <iostream>
struct Data
{
int x, y;
};
Data fill(Data& data)
{
data.x=3;
data.y=6;
return data;
}
int main()
{
Data d=fill(d);
std::cout << "x=" << d.x << ", y=" << d.y << "\n";
}
Здесь d
инициализируется копией из возвращаемого значения fill()
, но fill()
записывается в d
непосредственно перед возвратом его результата. Что меня беспокоит, так это то, что d
используется не тривиально до инициализации, а использование неинициализированных переменных в некоторых (все?) Случаях приводит к поведению undefined.
Итак, этот код действителен или имеет поведение undefined? Если оно действительно, будет ли поведение undefined раз Data
перестать быть POD или в каком-то другом случае?