https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71560
Martin Sebor <msebor at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Last reconfirmed| |2016-06-17
CC| |msebor at gcc dot gnu.org
Ever confirmed|0 |1
--- Comment #2 from Martin Sebor <msebor at gcc dot gnu.org> ---
Confirmed as a documentation bug. The quoted sentence:
Compound literals for scalar types and union types are also allowed, but then
the compound literal is equivalent to a cast.
is incorrect because a compound literal is an lvalue while a cast yields an
rvalue. So for example:
int i;
i = ++(int){ 123.4 };
is valid and initializes i to 124, while
i = ++(int)123;
is not valid. This reflected in footnote 99 in C11 which clarifies the
semantics of compound literals by saying:
99) Note that this differs from a cast expression. For example, a cast
specifies a conversion to scalar types or void only, and the result of a cast
expression is not an lvalue.