https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65525
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- Run till exit from #0 0x00000000012bf93a in build2_stat (code=MEM_REF, tt=<array_type 0x7ffff6a35f18>, arg0=<addr_expr 0x7ffff6a39760>, arg1=<integer_cst 0x7ffff6a33228>) at /space/rguenther/src/svn/trunk/gcc/tree.c:4385 0x00000000006f8b40 in build_over_call (cand=0x24f7aa0, flags=1, complain=3) at /space/rguenther/src/svn/trunk/gcc/cp/call.c:7456 7456 t = build2 (MODIFY_EXPR, void_type_node, Value returned is $9 = (tree_node *) 0x7ffff6a37758 (gdb) l 7451 array_type = build_array_type (char_type_node, 7452 build_index_type 7453 (size_binop (MINUS_EXPR, 7454 arg2, size_int (1)))); 7455 alias_set = build_int_cst (build_pointer_type (type), 0); 7456 t = build2 (MODIFY_EXPR, void_type_node, 7457 build2 (MEM_REF, array_type, arg0, alias_set), 7458 build2 (MEM_REF, array_type, arg, alias_set)); 7459 val = build2 (COMPOUND_EXPR, TREE_TYPE (to), t, to); so the C++ FE even builds this itself.