This is an extension that both gcc and clang
support. The gcc document says:
As an extension, GCC supports compound literals in C90 mode and in C++, though the semantics are somewhat different in C++.
if you build with -pedantic you should receive a warning, for example clang
says (see it live):
warning: compound literals are a C99-specific feature [-Wc99-extensions]
Note, the semantic differences in C++ are not minor and code that would be well-defined in C99 can have undefined behavior in C++ with this extension:
In C++, a compound literal designates a temporary object, which only
lives until the end of its full-expression. As a result, well-defined
C code that takes the address of a subobject of a compound literal can
be undefined in C++.