Mercurial > hg > CbC > CbC_gcc
comparison gcc/testsuite/g++.dg/template/scope5.C @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
111:04ced10e8804 | 131:84e7813d76e9 |
---|---|
1 // PR c++/84296 | |
2 | |
3 namespace b {} | |
4 namespace c { | |
5 using namespace b; | |
6 } | |
7 namespace b { | |
8 template <int d> struct e { static const int f = d; }; | |
9 } | |
10 template <typename> struct g; | |
11 template <typename h, typename i, typename aa, typename j> | |
12 struct g<h(i, aa, j)> : h::template ab<i, aa, j> {}; | |
13 struct k { | |
14 template <typename l> struct m { typedef typename g<l>::n o; }; | |
15 }; | |
16 template <typename> struct ac; | |
17 struct r { | |
18 typedef ac<int> p; | |
19 }; | |
20 template <typename q> struct s : k { | |
21 template <typename i, typename, typename> | |
22 struct ab : q::template t<typename i::u>::template ab<i, int, int> {}; | |
23 }; | |
24 struct ad { | |
25 typedef int u; | |
26 }; | |
27 template <typename> struct ae; | |
28 template <typename, typename ag> struct ah { | |
29 typedef ae<ag> ai; | |
30 typedef typename ai::template w<ai(r, int)>::o n; | |
31 }; | |
32 struct x { | |
33 template <typename i, typename, typename> struct ab : ah<i, int> {}; | |
34 }; | |
35 struct y { | |
36 struct z { | |
37 template <typename> struct t : x {}; | |
38 }; | |
39 struct aj : s<z> {}; | |
40 }; | |
41 template <typename i> struct ak { | |
42 typedef y::aj al; | |
43 typedef typename al::m<al(i, int, int)>::o o; | |
44 }; | |
45 struct am { | |
46 enum { an }; | |
47 }; | |
48 template <typename> struct ao {}; | |
49 template <typename af> struct ap : af::aq {}; | |
50 template <> struct ae<int> { | |
51 template <typename> struct w; | |
52 template <typename ar, typename as, typename at> struct w<ar(as, at)> { | |
53 typedef typename as::p o; | |
54 }; | |
55 }; | |
56 enum { a = b::e<0>::f }; | |
57 template <typename> class au; | |
58 template <typename av> struct ac : ao<av> { typedef c::e<am::an> aq; }; | |
59 template <typename aw, typename i, typename ax> void ay(aw, i, ax) { | |
60 au<c::e<ap<typename ak<i>::o>::f> > az(); | |
61 } | |
62 void v() { | |
63 ad a; | |
64 void az(); | |
65 ay(az, a, v); | |
66 } |