error: destructor used before its definition 解决办法
问题描述
下面的代码使用gcc12编译报错,但是使用clang13编译一切正常。
struct A {
constexpr virtual ~A() = default;
constexpr A() = default;
};
struct B : public A {
constexpr ~B() = default;
constexpr B() = default;
};
constexpr int demo(){
B *b = new B();
delete b;
return 2;
}
int main(){
constexpr int demod = demo();
return demod;
}
gcc 编译报错:
minimize-error.cpp: In function ‘int main()’:
minimize-error.cpp:18:31: in ‘constexpr’ expansion of ‘demo()’
minimize-error.cpp:13:12: error: ‘virtual constexpr B::~B()’ used before its definition
13 | delete b;
|
解决办法
首先这是一个gcc的bug,并非代码问题,参考:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93413
默认的虚析构函数在当前的gcc版本还不支持,可以显式的定义析构函数来解决:
constexpr virtual ~A() {}
/*...*/
constexpr ~B() {}
评论区