今天C++23的 std::is_implicit_lifetime有问题吗?
我在clang 22.1并使用 -stdlib=libc++实现 std::is_implicit_lifetime 时尝试了以下内容:
#include <cstdint>
#include <iostream>
#include <type_traits>
struct TC_NotILT {
int val;
// user-declared constructors thus not an aggregate, thus not implicit lifetime type
TC_NotILT(int i) : val{i} { std::cout << "not ILT\n"; }
// all special members are then implicitly declared and trivial thus trivially copyable
};
int main() {
std::cout << "expecting true: " << std::boolalpha << std::is_trivially_copyable_v<TC_NotILT>;
std::cout << '\n';
std::cout << "expecting false: " << std::boolalpha << std::is_implicit_lifetime_v<TC_NotILT>;
}
现场查看
我得到的结果是:
预期为真:true
预期为假:true
我的预期错了吗?是存在bug吗(到目前为止还没找到相关的bug报告)?
解决方案
如果T 是一个 隐式生命周期类型,则成员常量的值为true
这链接到:
隐式生命周期类
一个隐式生命周期类是一个类,其
- 是一个聚合,其析构函数在C++11之前不是由用户声明的,在C++11及以后由用户提供,或者
- 至少有一个平凡且符合条件的构造函数,以及一个平凡且未被删除的析构函数。
TC_NotILT 不是聚合,
但具有平凡拷贝构造函数和一个平凡且未被删除的析构函数。
你的预期是错的。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。