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