------- Comment #8 from redi at gcc dot gnu dot org 2009-11-03 18:10 ------- (In reply to comment #6) > > The ARM comment (as quoted) is clearly wrong: offhand, I can think of > two other ways of getting an object initialized. There are probably > more. > > 1. Casting the offending "const" away. (Note that struct A is a plain > old C type -- data members only.)
It's irrelevant that it has data members only. Casting away const on an object declared const is undefined behaviour. > 2. Copying an existing object. > > A a (*pa); Copy construction is dealt with separately from copy assignment, so has_complex_assign_ref is not relevant in this case. So the ARM comment may be incorrect, but not due to either of your reasons. As I said earlier, I'm not sure whether using A in a union causes the implicitly-declared copy assignment operator to be implicitly defined. This issue hinges on that point, not on the points you've been making. The standard is clear that a copy assignment operator is implicitly-declared. If it is implicitly defined then that copy assignment operator would be ill-formed. So the only question is whether using the type in a union causes it to be implicitly defined. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39934