template<typename T> struct S {
  __attribute__((always_inline)) static int f() { return 0; }
  __attribute__((always_inline, visibility("hidden"))) static int g() { return 0; }
};

extern template struct S<int>;

template<typename T> T min(T a, T b) { return a < b ? a : b; }

extern decltype(min(1, 2)) instantiate_min_decl;

template<typename T> struct CtorInit {
  static int f() { return 0; }
  int a;
  CtorInit() : a(f()) {}
};

namespace ImplicitSpecialMembers {
  struct A {
    A(const A&);
  };
  struct B {
    A a;
    B(int);
  };
  struct C {
    A a;
    C(int);
  };
  struct D {
    A a;
    D(int);
  };
}

namespace OperatorDeleteLookup {
  struct A { void operator delete(void*); virtual ~A() = default; };
  template<typename T> struct B { void operator delete(void*); virtual ~B() {} typedef int t; };
  typedef B<int>::t b_int_instantated;
}

namespace EmitInlineMethods {
  struct A {
    void f() {}
    void g();
  };
  struct B {
    void f();
    void g() {}
  };
}
