In aggregate initialization, you know that you are always initializing the first member of a union, anonymous or not, while a structured binding does not know which anonymous union member is active, and so there is no way for a structured binding to know which anonymous union member to bind to.
If structured bindings were to always bind to the first anonymous union member, and that member were not active, it would lead to undefined behavior in C++ (even if type punning would work in C).
Anonymous unions do not have a union object which can be bound to in structured bindings, since the anonymous union members become members of the containing scope.
In contrast, a named union member can be bound by a structured binding, because then the union member object is the binding, and whichever union member is active can be accessed through the union object.