Skip to content

Cpp26 - #382

Closed
qicosmos wants to merge 2 commits into
masterfrom
cpp26
Closed

Cpp26#382
qicosmos wants to merge 2 commits into
masterfrom
cpp26

Conversation

@qicosmos

Copy link
Copy Markdown
Owner

No description provided.

@qicosmos qicosmos left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. 正确性:member_names.hpp:177-183 中 get_member_offset_arr(T&& t) 的反射分支把结果缓存到 static std::array<size_t, Count> arr = std_meta::member_offsets(t);。这里 arr 仅按 T 实例化一次,但偏移计算依赖传入对象 t,若 member_offsets 通过对象地址求偏移,缓存首个对象结果会有潜在 UB/错误风险。建议确保 member_offsets 只基于类型而非实例,或改为 consteval/constexpr 类型级计算。

  2. 正确性/兼容性:member_count.hpp:14 无条件 #include "std_meta.hpp",虽然内部有宏保护,但会把实验特性头引入所有编译路径。若某些编译器对 <meta>/反射语法支持不完整,仍可能触发解析问题。建议将反射实现完全隔离到 #if IGUANA_ENABLE_CXX26_REFLECTION 分支内。

  3. 性能:std_meta.hpp:49-55 的 make_meta_pack 在 consteval 里使用 std::vector,编译期开销较高,也依赖编译器对 constexpr 动态分配的实现质量。建议改成定长容器或直接基于 range 展开,减少编译时间和实验特性风险。

  4. 正确性:member_ptr.hpp:103-111 中 struct_to_tuple() 反射分支调用 std_meta::member_ptr_tuple(internal::wrapper<type>::value),需确认 wrapper<type>::value 对非默认可构造类型是否可用;否则会让“可反射但不可默认构造”的类型编译失败。

  5. CI 稳定性:workflow:20-38 使用 gcc:16 Docker tag,当前官方镜像未必长期存在/稳定,PR 会因环境波动失败。建议固定 digest 或使用明确发行版镜像。

  6. 代码风格:CMakeLists.txt:42 使用 add_definitions(-DIGUANA_ENABLE_CXX26_REFLECTION),更推荐 add_compile_definitions(...);add_compile_options(-freflection) 也最好限定到目标级,避免全局污染。

@qicosmos qicosmos closed this Jun 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant