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 }