https://gcc.gnu.org/g:6db6adbe9ccab6f673a3be15caad5d7ad783002a
commit r16-9115-g6db6adbe9ccab6f673a3be15caad5d7ad783002a Author: Marek Polacek <[email protected]> Date: Fri Jun 12 15:46:10 2026 -0400 c++: bogus error with meta::members_of [PR125770] mark_used produces the use of built-in parameter pack '__integer_pack' outside of a template error even when called with tf_none (in this case, from resolve_type_of_reflected_decl). I played with the idea of skipping all fndecl_built_in_p functions in resolve_type_of_reflected_decl but it doesn't seem to make any reasonable difference on compile time. PR c++/125770 gcc/cp/ChangeLog: * decl2.cc (mark_used): Check complain & tf_error before giving an error. gcc/testsuite/ChangeLog: * g++.dg/reflect/members_of15.C: New test. Reviewed-by: Jason Merrill <[email protected]> (cherry picked from commit 73c9662616a7de98cb740c36e5df006afb26c1d1) Diff: --- gcc/cp/decl2.cc | 5 +++-- gcc/testsuite/g++.dg/reflect/members_of15.C | 9 +++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/gcc/cp/decl2.cc b/gcc/cp/decl2.cc index 351e1c3766fa..8bd893db7753 100644 --- a/gcc/cp/decl2.cc +++ b/gcc/cp/decl2.cc @@ -6806,8 +6806,9 @@ mark_used (tree decl, tsubst_flags_t complain /* = tf_warning_or_error */) if (builtin_pack_fn_p (decl)) { - error ("use of built-in parameter pack %qD outside of a template", - DECL_NAME (decl)); + if (complain & tf_error) + error ("use of built-in parameter pack %qD outside of a template", + DECL_NAME (decl)); return false; } diff --git a/gcc/testsuite/g++.dg/reflect/members_of15.C b/gcc/testsuite/g++.dg/reflect/members_of15.C new file mode 100644 index 000000000000..ef124f87e5c4 --- /dev/null +++ b/gcc/testsuite/g++.dg/reflect/members_of15.C @@ -0,0 +1,9 @@ +// PR c++/125770 +// { dg-do compile { target c++26 } } +// { dg-additional-options "-freflection" } + +#include <meta> + +consteval { + members_of(^^::, std::meta::access_context::unchecked()); +}
