struct A { int a_member; }; inline int use_a(A a) { return a.a_member; } class B { struct Inner1 {}; public: struct Inner2; template void f(); }; // Check that lookup and access checks are performed in the right context. struct B::Inner2 : Inner1 {}; template void B::f() {} // Check that base-specifiers are correctly disambiguated. template struct C_Base { struct D { constexpr operator int() const { return 0; } }; }; const int C_Const = 0; struct C1 : C_Base::D{}> {} extern c1; struct C2 : C_Base::D{} extern c2; typedef struct { int a; void f(); struct X; } D; struct D::X { int dx; } extern dx; inline int use_dx(D::X dx) { return dx.dx; } template int E(T t) { return t; } template struct F { int f(); template int g(); }; template int F::f() { return 0; } template template int F::g() { return 0; }