xref: /minix3/external/bsd/llvm/dist/clang/test/Modules/Inputs/merge-using-decls/b.h (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
1*0a6a1f1dSLionel Sambuc struct X {
2*0a6a1f1dSLionel Sambuc   int v;
3*0a6a1f1dSLionel Sambuc   typedef int t;
4*0a6a1f1dSLionel Sambuc };
5*0a6a1f1dSLionel Sambuc 
6*0a6a1f1dSLionel Sambuc struct YB {
7*0a6a1f1dSLionel Sambuc   typedef YB Y;
8*0a6a1f1dSLionel Sambuc   int value;
9*0a6a1f1dSLionel Sambuc   typedef int type;
10*0a6a1f1dSLionel Sambuc };
11*0a6a1f1dSLionel Sambuc 
12*0a6a1f1dSLionel Sambuc struct YBRev {
13*0a6a1f1dSLionel Sambuc   typedef int value;
14*0a6a1f1dSLionel Sambuc   int type;
15*0a6a1f1dSLionel Sambuc };
16*0a6a1f1dSLionel Sambuc 
17*0a6a1f1dSLionel Sambuc template<typename T> struct C : X, T {
18*0a6a1f1dSLionel Sambuc   using T::value;
19*0a6a1f1dSLionel Sambuc   using typename T::type;
20*0a6a1f1dSLionel Sambuc   using X::v;
21*0a6a1f1dSLionel Sambuc   using typename X::t;
22*0a6a1f1dSLionel Sambuc };
23*0a6a1f1dSLionel Sambuc 
24*0a6a1f1dSLionel Sambuc template<typename T> struct D : X, T {
25*0a6a1f1dSLionel Sambuc   // Mismatch in type/non-type-ness.
26*0a6a1f1dSLionel Sambuc   using typename T::value;
27*0a6a1f1dSLionel Sambuc   using T::type;
28*0a6a1f1dSLionel Sambuc   using X::v;
29*0a6a1f1dSLionel Sambuc   using typename X::t;
30*0a6a1f1dSLionel Sambuc };
31*0a6a1f1dSLionel Sambuc 
32*0a6a1f1dSLionel Sambuc template<typename T> struct E : X, T {
33*0a6a1f1dSLionel Sambuc   // Mismatch in using/access-declaration-ness.
34*0a6a1f1dSLionel Sambuc   T::value;
35*0a6a1f1dSLionel Sambuc   X::v;
36*0a6a1f1dSLionel Sambuc };
37*0a6a1f1dSLionel Sambuc 
38*0a6a1f1dSLionel Sambuc template<typename T> struct F : X, T {
39*0a6a1f1dSLionel Sambuc   // Mismatch in nested-name-specifier.
40*0a6a1f1dSLionel Sambuc   using T::Y::value;
41*0a6a1f1dSLionel Sambuc   using typename T::Y::type;
42*0a6a1f1dSLionel Sambuc   using ::X::v;
43*0a6a1f1dSLionel Sambuc   using typename ::X::t;
44*0a6a1f1dSLionel Sambuc };
45*0a6a1f1dSLionel Sambuc 
46*0a6a1f1dSLionel Sambuc // Force instantiation.
47*0a6a1f1dSLionel Sambuc typedef C<YB>::type I;
48*0a6a1f1dSLionel Sambuc typedef D<YBRev>::t I;
49*0a6a1f1dSLionel Sambuc typedef E<YB>::type I;
50*0a6a1f1dSLionel Sambuc typedef F<YB>::type I;
51