You won't likely find much GNU documentation on this because it is not a GCC extension - this is a part of standard C syntax called a compound literal. It is defined in the C standard, in sections 6.5.2.5 and 6.7.9 (the latter covers the part between the braces, which is the same for both compound literals and static initialisers, so the standard only describes it once).
You can use this syntax to describe dynamic object values as well, not just for static initialisations, even standing alone in an expression without having been assigned to any variable. A compound literal can appear essentially anywhere a variable name can appear: you can pass them to functions, create them just to access one element, take their address (you can even assign to them, although it's not obvious how that's useful).
The syntax is uniform across all C value types and can be used to create arrays (designate specific elements to set with [N]=
), structs and unions (designate specific elements with .field=
) and even numeric types (no elements, so don't designate, just put the value between the braces). The syntax is intended to be simple and consistent for macros and code generators to produce (in addition to being elegant to write by hand).