view gcc/testsuite/g++.dg/pr85478.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents
children
line wrap: on
line source

/* { dg-do compile { target { s390*-*-* } } } */
/* { dg-options "-O3 -march=arch12 -std=c++11 -Wno-return-type" } */

struct a {
  enum { b };
};
struct c {
  template <typename d, typename e> static void f(d g, e h) {
    d i;
    for (; i != g; ++h, ++i)
      *h = *i;
  }
};
template <int, typename d, typename e> void j(d g, e h) { c::f(g, h); }
template <int k, typename d, typename e> void l(d g, e h) { j<k>(g, h); }
template <typename d, typename e> void aa(d g, e h) { l<a::b>(g, h); }
template <typename> class ab;
template <> struct ab<float> {
  _Complex m() { return n; }
  _Complex n;
};
template <> struct ab<long double> {
  ab(ab<float> g) : n(g.m()) {}
  _Complex long double n;
};
template <int ac, typename o> class p {
public:
  template <typename q> p &operator=(const p<ac, q> &);
  o *ad;
};
template <typename o> class r : public p<2, o> {};
template <int ac, typename o>
template <typename q>
p<ac, o> &p<ac, o>::operator=(const p<ac, q> &g) {
  aa(&g.ad[0], &ad[0]);
}
template <typename ae> class s : public r<ae> {
  template <typename t> s &operator=(const s<t> &);
};
template <typename ae>
template <typename t>
s<ae> &s<ae>::operator=(const s<t> &g) {
  p<2, ae>::operator=(g);
}
template s<ab<long double>> &s<ab<long double>>::
operator=(const s<ab<float>> &);