// PR c++/78373
// { dg-do compile { target c++11 } }

struct A {
  static A singleton;
};
struct B {
  void m_fn2();
  virtual int m_fn1();
};
struct D : B {
  static int m_fn3(int, int, int, A) {
    D &self = singleton;
    self.m_fn2();
    return 0;
  }
  static D singleton;
};
template <typename, typename> struct C { bool m_fn4() const; };
template <typename Base, typename Traits> bool C<Base, Traits>::m_fn4() const {
  Traits::m_fn3(0, 0, 0, Base::singleton);
  return true;
}
template struct C<A, D>;
