C++23的std::is_implicit_lifetime在Clang 22.1下是否存在Bug?
问题分析:std::is_implicit_lifetime_v返回不符合预期的结果
你的预期完全正确,当前Clang 22.1搭配libc的输出结果不符合C标准,这应该是libc++实现std::is_implicit_lifetime时的Bug。
标准中隐式生命周期类型的定义
根据C++20及后续标准,隐式生命周期类型(Implicit Lifetime Type)需满足以下任一条件:
- 标量类型(如整数、指针、枚举等)
- 平凡可复制(trivially copyable)的聚合类型
- 上述类型的cv限定(const/volatile)版本
- 元素为上述类型的数组
对测试结构体的分析
你的TC_NotILT结构体:
- 包含用户声明的构造函数,因此不属于聚合类型(C++标准规定,聚合类型不能有用户声明的构造函数)
- 尽管它是平凡可复制类型,但由于不满足「平凡可复制聚合」这一核心条件,不符合隐式生命周期类型的判定要求,
std::is_implicit_lifetime_v<TC_NotILT>理应返回false。
当前编译器输出true的结果明显违反标准定义,建议你向LLVM的Bug跟踪系统提交该问题,补充你的测试用例和环境信息,帮助开发者修复这个实现缺陷。
内容的提问来源于stack exchange,提问作者Oersted
相关产品推荐
相关产品推荐

