https://gcc.gnu.org/g:fc5f8dd069e4229dcb3bab0900cf57254aca2ed1
commit r16-8441-gfc5f8dd069e4229dcb3bab0900cf57254aca2ed1 Author: Jakub Jelinek <[email protected]> Date: Fri Apr 3 10:27:36 2026 +0200 testsuite: Add testcase for CWG3162 - Evaluation context of manifestly constant-evaluated expressions Another testcase for something we already implement the desired way. 2026-04-03 Jakub Jelinek <[email protected]> * g++.dg/reflect/define_aggregate10.C: New test. Reviewed-by: Jason Merrill <[email protected]> Diff: --- gcc/testsuite/g++.dg/reflect/define_aggregate10.C | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/gcc/testsuite/g++.dg/reflect/define_aggregate10.C b/gcc/testsuite/g++.dg/reflect/define_aggregate10.C new file mode 100644 index 000000000000..59e63f747c6c --- /dev/null +++ b/gcc/testsuite/g++.dg/reflect/define_aggregate10.C @@ -0,0 +1,21 @@ +// CWG3162 - Evaluation context of manifestly constant-evaluated expressions +// { dg-do compile { target c++26 } } +// { dg-additional-options "-freflection" } + +#include <meta> + +struct S; + +consteval std::size_t +foo (int p) +{ + constexpr std::size_t r = /* Q */ std::meta::is_complete_type (^^S) ? 1 : 2; // #1 + if (!std::meta::is_complete_type (^^S)) // #2 + std::meta::define_aggregate (^^S, {}); + return p > 0 ? foo (p - 1) : r; +} + +consteval { + if (foo (1) != 2) + throw; // OK, not evaluated +}
