Fix test-suite fallout of default -Wreturn-type.
[official-gcc.git] / gcc / testsuite / g++.dg / pr81194.C
blob5f949389ec6a1f064d73803c17e086498879ccb9
1 // { dg-do compile }
2 // { dg-options "-O2 -std=c++17 -fno-exceptions" }
3 // { dg-additional-options "-Wno-return-type" }
5 template <class a> struct b { typedef a *c; };
6 class e {};
7 template <typename a> class d {
8 public:
9   typedef typename b<a>::c c;
10   c begin();
11   c end();
13 struct f {
14   enum { g } h;
16 struct i {
17   d<f *> j();
19 struct l {
20   d<i *> k();
22 class ac;
23 class o {
24 public:
25   o(int *, int *, int *, ac *);
27 class ac {
28 public:
29   ac(e);
30   virtual o *ae(int *, int *, int *, int *);
32 class p {
33   void af(f *m) {
34     switch (m->h)
35     case f::g:
36       ag();
37   }
39 public:
40   void n() {
41     l ah;
42     for (i *ai : ah.k())
43       for (f *m : ai->j())
44         af(m);
45   }
46   virtual void ag() { __builtin_unreachable(); }
48 template <typename = int> class an : o {
49 public:
50   an(int *, int *, int *, int *, ac *);
52 class q : ac {
53 public:
54   q() : ac([]() -> e {}()) {}
55   o *ae(int *ap, int *aq, int *ar, int *as) { an(ap, aq, ar, as, this); }
57 template <typename at>
58 an<at>::an(int *, int *aq, int *ar, int *as, ac *au) : o(aq, ar, as, au) {
59   p().n();
61 void av() { new q; }