[C++ PATCH] Deprecate -ffriend-injection
[official-gcc.git] / gcc / testsuite / g++.dg / lto / pr83720_0.C
blob4e63c9be7cd11ee61ec90b0183eb99d088126e35
1 // PR c++/83720
2 // { dg-lto-do assemble }
4 #pragma GCC diagnostic ignored "-Wreturn-type"
6 namespace b {
7 class h {
8 public:
9   template <typename ae, typename af> h(ae af::*...) {
10     [] {};
11   }
13 class ai {};
14 template <typename> class c {
15 public:
16   template <typename ag> void aj(const char *, ag f) { h(f, int()); }
19 template <typename> class al;
20 template <typename e> class i {
21 protected:
22   static e g(const int) {  }
24 template <typename, typename> class j;
25 template <typename an, typename e, typename... ao>
26 class j<an(ao...), e> : i<e> {
27   typedef i<e> ap;
29 public:
30   static an aq(const int &ar, ao... as) { ap::g(ar)(as...); }
32 template <typename an, typename... ao> class al<an(ao...)> {
33   template <typename, typename a> using ax = a;
35 public:
36   template <typename e, typename = ax<int, void>, typename = ax<int, void>>
37   al(e);
38   using ay = an (*)(const int &, ao...);
39   ay az;
41 template <typename an, typename... ao>
42 template <typename e, typename, typename>
43 al<an(ao...)>::al(e) {
44   az = j<an(ao...), e>::aq;
46 class k {
47 public:
48   k(al<void(b::ai)>);
49 } d([](b::ai) {
50   struct be {
51     virtual void f();
52   };
53   struct bf;
54   b::c<bf>().aj("", &be::f);
55 });