1*67e74705SXin Li template<typename T> struct SomeTemplate {}; 2*67e74705SXin Li 3*67e74705SXin Li struct DefinedInCommon { 4*67e74705SXin Li void f(); 5*67e74705SXin Li struct Inner {}; 6*67e74705SXin Li friend void FoundByADL(DefinedInCommon); 7*67e74705SXin Li }; 8*67e74705SXin Li 9*67e74705SXin Li template<typename T> struct CommonTemplate { 10*67e74705SXin Li enum E { a = 1, b = 2, c = 3 }; 11*67e74705SXin Li }; 12*67e74705SXin Li 13*67e74705SXin Li namespace Std { 14*67e74705SXin Li template<typename T> struct WithFriend { 15*67e74705SXin Li friend bool operator!=(const WithFriend &A, const WithFriend &B) { return false; } 16*67e74705SXin Li }; 17*67e74705SXin Li } 18*67e74705SXin Li 19*67e74705SXin Li namespace Std { f()20*67e74705SXin Li template<typename T> void f() { 21*67e74705SXin Li extern T g(); 22*67e74705SXin Li } 23*67e74705SXin Li } 24*67e74705SXin Li 25*67e74705SXin Li template<typename T> struct TemplateInstantiationVisibility { typedef int type; }; 26*67e74705SXin Li 27*67e74705SXin Li template<typename T> struct Outer { 28*67e74705SXin Li template<typename U> struct Inner { 29*67e74705SXin Li static constexpr int f(); 30*67e74705SXin Li static constexpr int g(); 31*67e74705SXin Li }; 32*67e74705SXin Li }; 33*67e74705SXin Li 34*67e74705SXin Li template<typename T> struct WithPartialSpecialization {}; 35*67e74705SXin Li template<typename T> struct WithPartialSpecialization<void(T)> { typedef int type; }; 36*67e74705SXin Li typedef WithPartialSpecialization<int*> WithPartialSpecializationUse; 37*67e74705SXin Li typedef WithPartialSpecialization<void(int)> WithPartialSpecializationUse2; 38*67e74705SXin Li 39*67e74705SXin Li template<typename T> struct WithExplicitSpecialization; 40*67e74705SXin Li typedef WithExplicitSpecialization<int> WithExplicitSpecializationUse; 41*67e74705SXin Li 42*67e74705SXin Li template<typename T> struct WithImplicitSpecialMembers { int n; }; 43*67e74705SXin Li 44*67e74705SXin Li template<typename T> struct WithAliasTemplate { 45*67e74705SXin Li template<typename> using X = T; 46*67e74705SXin Li }; 47*67e74705SXin Li 48*67e74705SXin Li template<typename T> struct WithAnonymousDecls { 49*67e74705SXin Li struct { bool k; }; 50*67e74705SXin Li union { int a, b; }; 51*67e74705SXin Li struct { int c, d; } s; 52*67e74705SXin Li enum { e = 123 }; 53*67e74705SXin Li typedef int X; 54*67e74705SXin Li }; 55*67e74705SXin Li 56*67e74705SXin Li namespace hidden_specializations { 57*67e74705SXin Li template<typename T> void fn() {} 58*67e74705SXin Li 59*67e74705SXin Li template<typename T> struct cls { 60*67e74705SXin Li static void nested_fn() {} 61*67e74705SXin Li struct nested_cls {}; 62*67e74705SXin Li static int nested_var; 63*67e74705SXin Li enum class nested_enum {}; 64*67e74705SXin Li 65*67e74705SXin Li template<typename U> static void nested_fn_t() {} 66*67e74705SXin Li template<typename U> struct nested_cls_t {}; 67*67e74705SXin Li template<typename U> static int nested_var_t; 68*67e74705SXin Li }; 69*67e74705SXin Li 70*67e74705SXin Li template<typename T> int var; 71*67e74705SXin Li } 72*67e74705SXin Li 73*67e74705SXin Li #include "cxx-templates-textual.h" 74