/* { dg-do compile } */
/* { dg-require-effective-target c++11 } */
/* { dg-additional-options "-O3" } */
/* { dg-additional-options "-march=z13" { target s390x-*-* } } */
template <int a> struct k { static constexpr int c = a; };
template <bool, bool, typename...> struct o;
template <typename f, typename... g> struct o<false, false, f, g...> {
  typedef decltype(0) h;
};
template <typename... g> struct p : o<k<false>::c, k<false>::c, g...> {};
class q;
class r {
public:
  void ap(q);
};
template <typename, typename aw> void ax(aw ay) { ay(); }
template <typename az> void ba(az bb) {
  using bc = p<az>;
  using bd = typename bc::h;
  ax<bd>(bb);
}
template <unsigned> class s;
class t {
public:
  s<8> br();
  template <typename...> void operator()() { ba(br()); }
};
class q {
public:
  template <typename az> q(az) { H(); }
  struct H {
    t cc;
    H() { cc(); }
  };
};
template <unsigned long> struct I {};
template <unsigned long cl, typename j> void cm(j cn, I<cl>) {
  cm(cn, I<cl - 1>());
  cn(cl);
}
template <typename j> void cm(j, I<0>) {}
template <unsigned co> struct u {
  long cp[co];
  void cq(const u &);
  void cs(int);
  void operator<(u);
};
template <unsigned co> void u<co>::cq(const u &l) {
  cm([&](int i) { cp[i] &= l.cp[i]; }, I<co>());
}
template <unsigned co> void u<co>::cs(int m) {
  cm([&](int i) { cp[i] >>= m; }, I<co - 2>());
}
template <unsigned> class K;
template <unsigned co> class v {
  int cv;
  friend K<co>;
public:
  void cx(int, unsigned char *, unsigned long long);
};
template <unsigned co> class K {
public:
  static void cx(v<co> &);
};
template <unsigned co>
void v<co>::cx(int, unsigned char *, unsigned long long) {
  K<co>::cx(*this);
}
template <unsigned co> void K<co>::cx(v<co> &cz) {
  u<co> a, b, d;
  int e, n = cz.cv;
  for (; e;)
    if (cz.cv)
      a.cs(cz.cv);
  a.cq(d);
  a < b;
}
template <unsigned co> class s {
  v<co> *dh;
public:
  void operator()();
};
template <unsigned co> void s<co>::operator()() {
  int f;
  unsigned char g;
  long h;
  dh->cx(f, &g, h);
}
void d() {
  r i;
  t j;
  i.ap(j);
}