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
相关产品推荐
相关产品推荐

