I disbelieve you can get this in C or C++. The fragment above is a syntax error. AFAIK, all of this is simple laziness in the Ada front end: generating &<constructor> is how things were done at the beginning of time, and it was easier to change this in the gimplifier than to modify the code that generated this directly.
Well, it's more that what this should get changed to is the address of a temporary and the gimplifier already has code to make the temporaries so why duplicate that code in Gigi?