1*67e74705SXin Li template<typename T> struct S { fS2*67e74705SXin Li __attribute__((always_inline)) static int f() { return 0; } gS3*67e74705SXin Li __attribute__((always_inline, visibility("hidden"))) static int g() { return 0; } 4*67e74705SXin Li }; 5*67e74705SXin Li 6*67e74705SXin Li extern template struct S<int>; 7*67e74705SXin Li 8*67e74705SXin Li template<typename T> T min(T a, T b) { return a < b ? a : b; } 9*67e74705SXin Li 10*67e74705SXin Li extern decltype(min(1, 2)) instantiate_min_decl; 11*67e74705SXin Li 12*67e74705SXin Li template<typename T> struct CtorInit { 13*67e74705SXin Li static int f() { return 0; } 14*67e74705SXin Li int a; 15*67e74705SXin Li CtorInit() : a(f()) {} 16*67e74705SXin Li }; 17*67e74705SXin Li 18*67e74705SXin Li namespace ImplicitSpecialMembers { 19*67e74705SXin Li struct A { 20*67e74705SXin Li A(const A&); 21*67e74705SXin Li }; 22*67e74705SXin Li struct B { 23*67e74705SXin Li A a; 24*67e74705SXin Li B(int); 25*67e74705SXin Li }; 26*67e74705SXin Li struct C { 27*67e74705SXin Li A a; 28*67e74705SXin Li C(int); 29*67e74705SXin Li }; 30*67e74705SXin Li struct D { 31*67e74705SXin Li A a; 32*67e74705SXin Li D(int); 33*67e74705SXin Li }; 34*67e74705SXin Li } 35*67e74705SXin Li 36*67e74705SXin Li namespace OperatorDeleteLookup { 37*67e74705SXin Li struct A { void operator delete(void*); virtual ~A() = default; }; 38*67e74705SXin Li template<typename T> struct B { void operator delete(void*); virtual ~B() {} typedef int t; }; 39*67e74705SXin Li typedef B<int>::t b_int_instantated; 40*67e74705SXin Li } 41*67e74705SXin Li 42*67e74705SXin Li namespace EmitInlineMethods { 43*67e74705SXin Li struct A { 44*67e74705SXin Li void f() {} 45*67e74705SXin Li void g(); 46*67e74705SXin Li }; 47*67e74705SXin Li struct B { 48*67e74705SXin Li void f(); 49*67e74705SXin Li void g() {} 50*67e74705SXin Li }; 51*67e74705SXin Li } 52