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

C++23中统计类非静态成员数量的实现及编译器支持问题咨询

C++23下获取类非静态成员数量的实现问题

我正在开发一个序列化库,需要编写一个兼容C++23标准的函数,用来返回类的非静态成员数量。我尝试了两种实现方法,但都没能成功,具体情况如下:

方法一:可变参数结构化绑定

我尝试通过可变参数结构化绑定来实现这个功能,但目前没有编译器支持该特性,代码如下:

template<class T>
consteval auto count(T&& t)
{
    auto&& [...a] = t;
    return sizeof...(a);
}

想问问现有编译器是否有计划支持这个特性?

方法二:基于约束重载的变通方案

之后我改用约束重载的方式做变通,但所有编译器都直接报硬错误,而不是触发约束失败,代码如下:

template<class T>
constexpr auto count(T&& t) requires requires
{
    [](T&& f){auto [a, b] = f;}(std::forward<T>(t));
}
{
    return 2;
}

template<class T>
constexpr auto count(T&& t) requires requires
{
    [](T&& f){auto [a, b, c] = f;}(std::forward<T>(t));
}
{
    return 3;
}

想请教这是编译器的Bug,还是我的代码存在错误?符合C++23标准的编译器是不是应该仅让约束失败,而不是抛出硬错误?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 12:37:16