https://gcc.gnu.org/g:9634a3b1a74e3483459e1bbf2d152fc558899c9c
commit r16-8083-g9634a3b1a74e3483459e1bbf2d152fc558899c9c Author: Marek Polacek <[email protected]> Date: Fri Mar 13 13:57:37 2026 -0400 c++/reflection: add test This test now works too. Fixed by r16-8009 I think. gcc/testsuite/ChangeLog: * g++.dg/reflect/expansion-stmt3.C: New test. Diff: --- gcc/testsuite/g++.dg/reflect/expansion-stmt3.C | 31 ++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/gcc/testsuite/g++.dg/reflect/expansion-stmt3.C b/gcc/testsuite/g++.dg/reflect/expansion-stmt3.C new file mode 100644 index 000000000000..d8d377fc1170 --- /dev/null +++ b/gcc/testsuite/g++.dg/reflect/expansion-stmt3.C @@ -0,0 +1,31 @@ +// { dg-do compile { target c++26 } } +// { dg-additional-options "-freflection" } + +#include <meta> +#include <string_view> + +int volatile sink = 0; +void use(auto&& x) { + sink += sizeof(x); +} + +template <typename T> +void reflect_struct(T const& obj) { + static constexpr std::meta::info mems[] = {^^T::name, ^^T::age, ^^T::active}; + + template for (constexpr std::meta::info field : mems) { + use(std::meta::identifier_of(field)); + use(obj.[:field:]); + } +} + +template <int> +struct User { + std::string_view name; + int age; + bool active; +}; + +int main() { + reflect_struct(User<0>{.name = "Alice", .age = 30, .active = true}); +}
