annotate gcc/testsuite/g++.dg/cpp0x/nsdmi-template18.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
1 // PR c++/86099
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2 // { dg-do compile { target c++11 } }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4 template <int a> struct e { static constexpr int c = a; };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5 template <bool a> using d = e<a>;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6 template <bool, typename> struct aa;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7 template <typename...> struct j;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8 template <typename f, typename g> struct j<f, g> : aa<f::c, g>::h {};
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9 template <typename i> struct n : d<i::c> {};
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10 template <typename k, typename l = k> l m(int);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 template <typename k> auto ab() -> decltype(m<k>(0));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12 template <typename...> struct p;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13 template <typename k, typename o> struct p<k, o> : e<noexcept(k(ab<o>()))> {};
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14 template <typename> struct r;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 class s;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16 template <typename, typename... q>
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 struct ac : j<d<true>, p<r<s>, q...>> {};
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18 template <typename k> struct ae : ac<k, k> {};
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19 template <bool, typename ad> struct aa { typedef ad h; };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20 template <typename k> struct w : j<n<ae<k>>, d<true>> {};
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 template <typename t> struct r {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22 t f;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 int af;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24 r(r &&) = default;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26 template <typename k, typename = typename aa<w<k>::c, k>::h> void v(k *);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27 template <typename ag, typename ah, typename ai> ah aj(ag x, ah, ai) { v(x); return 0; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28 template <typename> struct y { typedef int ak; };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 template <typename, typename = int> class z {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30 public:
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31 template <typename...> void al();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33 template <typename k, typename am> template <typename...> void z<k, am>::al() {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34 r<s> *u;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 typename y<am>::ak a = aj(u, a, int());
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37 class s {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38 char *an = nullptr;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40 void ao() {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
41 z<int> b;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
42 b.al();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43 }