在以下代码中,使用 Clang 8.0.0+ 编译,并且-std=c++17
使用创建派生类实例B{}
会产生错误error: temporary of type 'A' has protected destructor
。当临时具有类型(因此应该具有公共析构函数)时,为什么会A
出现在此消息中?B
class A {
protected:
A() = default;
~A() = default;
};
class B : public A {
// can also omit these 3 lines with the same result
public:
B() = default;
~B() = default;
};
void foo(const B&) {}
int main() {
// error: temporary of type 'A' has protected destructor
foo(B{});
// ^
return 0;
}