You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取删除函数的clang::SourceRange?非成员函数范围异常咨询

Clang AST中全局删除函数的SourceRange问题

我在处理一段代码生成的Clang AST时遇到了问题,代码如下:

struct has_deleted_function_member
{
void deleted_function1() = delete;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ col:33
};

void deleted_function2() = delete;
//~~~~~~~~~~~~~~~~~~~~~^ col:24

int main()
{
  return 0;
}

我需要获取has_deleted_function_member::deleted_function1和deleted_function2这两个FunctionDecl的完整SourceRange——也就是覆盖从开头的void到分号前的整个声明范围。调用deleted_function1的getSourceRange()能得到预期结果,但deleted_function2的getSourceRange()仅覆盖到右括号位置。

对应的AST转储信息如下:

CXXMethodDecl 0x1299b40 <line:3:1, col:33> col:6 deleted_function1 'void ()' delete
FunctionDecl 0x1299c38 <line:7:1, col:24> col:6 deleted_function2 'void ()' delete

请问这种排除= delete部分的情况是Bug还是预期行为?如果是预期行为,能否通过编程方式获取它的完整SourceRange?

使用的编译器版本详情:

❯ clang++ --version
Ubuntu clang version 14.0.0-1ubuntu1.1
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin

内容的提问来源于stack exchange,提问作者Jared Hoberock

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 05:45:05