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).
2026-02-17 Jakub Jelinek <jakub@redhat.com>
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).
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));
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));