Structured Bindings

struct Point
{
int x;
int y;
};
Point pt{1, 2};
// Here we get an additional object injected to which ax and ay refer.
auto [ax, ay] = pt;
// In case of an reference the injected object is just a reference to
// the original one.
auto& [a2x, a2y] = pt;

Here is the transformed code:

struct Point
{
int x;
int y;
// inline constexpr Point(const Point &) noexcept = default;
};
Point pt = {1, 2};
Point __pt9 = Point(pt);
int & ax = __pt9.x;
int & ay = __pt9.y;
Point & __pt13 = pt;
int & a2x = __pt13.x;
int & a2y = __pt13.y;

Live view