Hi! Given https://eel.is/c++draft/expr.reflect#5.1 we error on typedef __SIZE_TYPE__ A; namespace B { using ::A; typedef __SIZE_TYPE__ C; } using B::C; constexpr auto a = ^^A; constexpr auto b = ^^B::A; constexpr auto c = ^^B::C; constexpr auto d = ^^C; on ^^B::A and ^^C (note, clang++ fork only errors on ^^B::A). Now, whether size_t is typedef __SIZE_TYPE__ size_t; namespace std { using ::size_t; } or namespace std { typedef __SIZE_TYPE__ size_t; } using std::size_t; depends on the target and clearly is the latter on Solaris, so testing whether ^^size_t is a type alias doesn't work there - it is found as a using decl there. So the following patch stops testing it for size_t and tests yet another user alias (a typedef is already tested - ^^T).
Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? 2026-02-17 Jakub Jelinek <[email protected]> PR c++/124119 * g++.dg/reflect/is_type_alias2.C (W): New type alias. Assert is_type_alias (^^W). Don't assert is_type_alias (^^size_t). --- gcc/testsuite/g++.dg/reflect/is_type_alias2.C.jj 2026-01-15 16:33:47.011097891 +0100 +++ gcc/testsuite/g++.dg/reflect/is_type_alias2.C 2026-02-16 14:28:07.679720377 +0100 @@ -15,6 +15,7 @@ template<typename T> using V = S<T*>; typedef int T; +using W = decltype (sizeof (0)); static_assert (!is_type_alias (^^S<int>)); static_assert (is_type_alias (^^U)); @@ -22,7 +23,7 @@ static_assert (!is_type_alias (^^V)); static_assert (is_type_alias (^^V<int>)); static_assert (is_type_alias (^^T)); static_assert (!is_type_alias (^^wchar_t)); -static_assert (is_type_alias (^^size_t)); +static_assert (is_type_alias (^^W)); using A = void(int, int); static_assert (is_type_alias (^^A)); Jakub
