On 2/17/26 3:08 PM, Jakub Jelinek wrote:
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?
OK.
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