今天C++23的 std::is_implicit_lifetime有问题吗?

编程语言 2026-07-10

我在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报告)?

解决方案

来自 std::is_implicit_lifetime

如果T 是一个 隐式生命周期类型,则成员常量的值为true

这链接到:

隐式生命周期类
一个隐式生命周期类是一个类,其

  • 是一个聚合,其析构函数在C++11之前不是由用户声明的,在C++11及以后由用户提供,或者
  • 至少有一个平凡且符合条件的构造函数,以及一个平凡且未被删除的析构函数。

TC_NotILT 不是聚合,
但具有平凡拷贝构造函数和一个平凡且未被删除的析构函数。

你的预期是错的。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章