在Clang上禁用“移动构造函数可用时删除复制构造函数”

时间:2012-01-10 02:23:24

标签: c++ c++11 clang clang++

在StackOverflow上查看我在使用C ++ 11标准时发现在Clang ++上,如果已经为您的类定义了一个移动构造函数,则隐式构造函数生成被禁用,即复制构造函数被“删除已删除”。

有没有办法禁用此行为?

此外,这种行为是否标准化?因为我在GCC中没有相同的行为。

1 个答案:

答案 0 :(得分:8)

  

有没有办法禁用此行为?

没有。但你可以随时:

A(const A&) = default;

虽然我不确定clang目前是否完全实现了默认的拷贝构造函数。

  

此外,这种行为是否已标准化?

是。 [class.copy] / P7:

  

如果类定义未明确声明副本   构造函数,一个是隐式声明的。如果是类定义   声明一个移动构造函数或移动赋值运算符   隐式声明的复制构造函数被定义为已删除; ...

...

  

因为我在GCC中没有相同的行为。

哪个版本?我猜想最新的gcc版本与clang具有相同的行为。但我没有可用于试验。