xref: /aosp_15_r20/external/clang/test/Modules/Inputs/merge-using-decls/a.h (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li struct X {
2*67e74705SXin Li   int v;
3*67e74705SXin Li   typedef int t;
4*67e74705SXin Li };
5*67e74705SXin Li 
6*67e74705SXin Li struct YA {
7*67e74705SXin Li   int value;
8*67e74705SXin Li   typedef int type;
9*67e74705SXin Li };
10*67e74705SXin Li 
11*67e74705SXin Li template<typename T> struct C : X, T {
12*67e74705SXin Li   using T::value;
13*67e74705SXin Li   using typename T::type;
14*67e74705SXin Li   using X::v;
15*67e74705SXin Li   using typename X::t;
16*67e74705SXin Li };
17*67e74705SXin Li 
18*67e74705SXin Li template<typename T> struct D : X, T {
19*67e74705SXin Li   using T::value;
20*67e74705SXin Li   using typename T::type;
21*67e74705SXin Li   using X::v;
22*67e74705SXin Li   using typename X::t;
23*67e74705SXin Li };
24*67e74705SXin Li 
25*67e74705SXin Li template<typename T> struct E : X, T {
26*67e74705SXin Li   using T::value;
27*67e74705SXin Li   using typename T::type;
28*67e74705SXin Li   using X::v;
29*67e74705SXin Li   using typename X::t;
30*67e74705SXin Li };
31*67e74705SXin Li 
32*67e74705SXin Li template<typename T> struct F : X, T {
33*67e74705SXin Li   using T::value;
34*67e74705SXin Li   using typename T::type;
35*67e74705SXin Li   using X::v;
36*67e74705SXin Li   using typename X::t;
37*67e74705SXin Li };
38*67e74705SXin Li 
39*67e74705SXin Li // Force instantiation.
40*67e74705SXin Li typedef C<YA>::type I;
41*67e74705SXin Li typedef D<YA>::type I;
42*67e74705SXin Li typedef E<YA>::type I;
43*67e74705SXin Li typedef F<YA>::type I;
44