Are compound literals Standard C++?

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++.

Leave a Comment