微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在clang的AST中找到隐式删除的默认构造函数?

如何解决如何在clang的AST中找到隐式删除的默认构造函数?

考虑 foo.cc 中的以下结构定义:

struct Foo
{
  int &bar;
};

因为 bar 具有引用类型,隐式平凡认构造函数 Foo::Foo() 被隐式删除。然而,这个事实似乎并没有反映在 clang 生成的 AST 中。例如。运行 clang -Xclang -ast-dump foo.cc 结果:

`-CXXRecordDecl 0x5612ba4c03b8 <test.cc:1:1,col:24> col:8 struct Foo deFinition
  |-DeFinitionData pass_in_registers aggregate trivially_copyable trivial literal
  | |-DefaultConstructor exists trivial needs_implicit
  | |-copyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param
  | |-MoveConstructor exists simple trivial needs_implicit
  | |-copyAssignment trivial has_const_param needs_implicit implicit_has_const_param
  | |-MoveAssignment exists trivial needs_implicit
  | `-Destructor simple irrelevant trivial needs_implicit
  |-CXXRecordDecl 0x5612ba4c04e0 <col:1,col:8> col:8 implicit struct Foo
  `-FieldDecl 0x5612ba4c05b8 <col:14,col:19> col:19 bar 'int &'

所以这里看起来像一个隐含的平凡认构造函数存在,但没有提到它被删除。同样,clang::CXXRecordDecl API 似乎也没有提供确定这一点的方法。但是此时(在语义分析之后)这些信息不应该可用吗?如何使用 clang AST API 查明某个类的隐式平凡认构造函数是否被隐式删除

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。