https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94264
Marek Polacek <mpolacek at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Last reconfirmed| |2020-04-18
CC| |mpolacek at gcc dot gnu.org
Ever confirmed|0 |1
Status|UNCONFIRMED |NEW
--- Comment #1 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
cp_build_binary_op calls cp_default_conversion on its operands and that calls
decay_conversion which has:
2153 /* Don't let an array compound literal decay to a pointer. It can
2154 still be used to initialize an array or bind to a reference. */
2155 if (TREE_CODE (exp) == TARGET_EXPR)
2156 {
2157 if (complain & tf_error)
2158 error_at (loc, "taking address of temporary array");
2159 return error_mark_node;
2160 }
convert_like_real does
+ /* Take the address explicitly rather than via decay_conversion
+ to avoid the error about taking the address of a temporary. */
+ array = cp_build_addr_expr (array, complain);
+ array = cp_convert (build_pointer_type (elttype), array);
to avoid that error.