如何解决如何在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 举报,一经查实,本站将立刻删除。