给定基类 A 和派生类 B,A 有一个已删除的移动构造函数。
在这种情况下,由于已删除的移动构造函数,以下函数无法编译:
但是对于B的类似功能却没有报告任何错误。
这是否意味着B中的移动构造函数没有被删除?我想知道标准中的规定是什么。
class A {
public:
A() {}
A(const A&) = default;
A(A&&) = delete;
};
class B : public A
{
};
在这种情况下,由于已删除的移动构造函数,以下函数无法编译:
A f() {
A a;
return a;
}
但是对于B的类似功能却没有报告任何错误。
B g() {
B b;
return b;
}
这是否意味着B中的移动构造函数没有被删除?我想知道标准中的规定是什么。
f
的情况也应该编译通过。相关部分:“如果第一个重载解析失败或未执行,或者所选构造函数的第一个参数的类型不是指向对象类型的右值引用(可能带有cv限定符),则将重新执行重载解析,将对象视为左值。” GCC对我有效,但Clang无效:https://godbolt.org/z/8EbcnfTfb。 - Daniel Langr