侧边栏壁纸
博主头像
noerror

虚灵不寐,众理具而万事出。

  • 累计撰写 239 篇文章
  • 累计创建 9 个标签
  • 累计收到 2 条评论
标签搜索

目 录CONTENT

文章目录

error: destructor used before its definition 解决办法

noerror
2022-09-17 / 0 评论 / 0 点赞 / 201 阅读 / 199 字 / 正在检测是否收录...

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() {}
0

评论区