http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57319

Jason Merrill <jason at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |diagnostic
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2013-05-20
                 CC|                            |jason at gcc dot gnu.org
     Ever confirmed|0                           |1

--- Comment #1 from Jason Merrill <jason at gcc dot gnu.org> ---
(In reply to Paul Pluzhnikov from comment #0)
>   However, this particular case *isn't* the problematic case, because
>   (a) this sample code should not trigger the definition of C's move
>       assignment operator, and

True, the warning is given at declaration time; it would be possible to move
the warning to when the move assignment is used, but that might mean design
errors don't get caught until later.

>   (b) there is only one inheritance path from C to B, so it won't be
>       move-assigned multiple times, and

True, the warning is given at the point of first virtual derivation rather than
when it appears in a diamond-shaped hierarchy.  But the purpose of virtual
derivation is to support diamond-shaped hierarchies, so again it seems
appropriate to warn sooner rather than later.

>   (c) the issue isn't with *non-trivial* move assignments, it's with
>       *user-provided* move-assignments (for the virtual base or any of its
>       subobjects), which B does not have.

Agreed, it would definitely be better for the warning to check that none of the
subobjects of B have user-provided move-assignments.

Reply via email to