Compound Literals are a C99 construct. Even though I can do this in C++ :
#include
using namespace std;
int main() {
for (auto i : (flo
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++.