GCC does it just because Visual Studio does it, and people would complain if GCC was too incompatible with Microsoft's compiler.
anonymous structures within an anonymous union are not legal C++. Its a visual studio extension.
Crap, I've been looking the standard up and down and I didn't find anything that would make this illegal. Though I could've looked harder. Maybe there's a difference between C11 and C++11 in this regard? But I do know that it's not just a visual studio extension; it works well on gcc and clang as well.
If you have compiler warnings set to their proper level, GCC would tell you that it's non-standard, iirc (I ran into this a few months back). Though, the documentation for GCC does imply that C11 permits it.