[cfe-dev] A question about when a defaulted move assignment operator is deleted

Richard Smith richard at metafoo.co.uk
Wed May 15 21:03:11 PDT 2013

This is not a forum for learning about C++; stackoverflow.com would be a
better place to ask such questions.

On Wed, May 15, 2013 at 8:42 PM, ZhangXiongpang <zhangxiongpang at gmail.com>wrote:

> Platform: linux, x86_84, clang++3.3 (trunk 178517), g++4.7.2
> I'm learning C++11 standard, and often write some code to test clang++.
> But sometimes I'm not sure whether my understanding is right when clang++
> does not work as my expecting.
> 12.8/p23 in N3290:
> --------------------------------------------------------
> A defaulted copy/move assignment operator for class X is defined as deleted
> if X has:
>   ...
>   -- for the move assignment operator, a non-static data member or direct
> base class with a type that does
>      not have a move assignment operator and is not trivially copyable, or
> any direct or indirect virtual
>      base class.
> --------------------------------------------------------
> Does it partially mean that the defaulted move assignment operator for
> class
> X is defined as deleted if X has any direct or indirect virtual base class?

In the latest draft of the standard, that bullet has been removed. (Since
virtual bases can be assigned multiple times by defaulted assignment
operators, this means that the compiler might generate a broken move
assignment operator for classes which inherit from the same virtual base
through multiple inheritance paths. I argued against this, but the
committee seemed to prefer the simpler rule.)

We also have this (which doesn't help in your example, but is relevant in

"A defaulted move assignment operator that is defined as deleted is ignored
by overload resolution (13.3, 13.4)."

Clang doesn't implement this correctly in all cases yet, though.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20130515/5b85b76c/attachment.html>

More information about the cfe-dev mailing list