15de91b58SRichard Smith template<typename T> struct SomeTemplate {}; 20e5d7b8cSRichard Smith 30e5d7b8cSRichard Smith struct DefinedInCommon { 40e5d7b8cSRichard Smith void f(); 50e5d7b8cSRichard Smith struct Inner {}; 60e5d7b8cSRichard Smith friend void FoundByADL(DefinedInCommon); 70e5d7b8cSRichard Smith }; 801a7337cSRichard Smith 901a7337cSRichard Smith template<typename T> struct CommonTemplate { 1001a7337cSRichard Smith enum E { a = 1, b = 2, c = 3 }; 1101a7337cSRichard Smith }; 12c264d35aSRichard Smith 13c264d35aSRichard Smith namespace Std { 14c264d35aSRichard Smith template<typename T> struct WithFriend { 15c264d35aSRichard Smith friend bool operator!=(const WithFriend &A, const WithFriend &B) { return false; } 16c264d35aSRichard Smith }; 17c264d35aSRichard Smith } 18561e0dceSRichard Smith 19561e0dceSRichard Smith namespace Std { f()20561e0dceSRichard Smith template<typename T> void f() { 21561e0dceSRichard Smith extern T g(); 22561e0dceSRichard Smith } 23561e0dceSRichard Smith } 243d23c420SRichard Smith 253d23c420SRichard Smith template<typename T> struct TemplateInstantiationVisibility { typedef int type; }; 26851072efSRichard Smith 27851072efSRichard Smith template<typename T> struct Outer { 28851072efSRichard Smith template<typename U> struct Inner { 29dc5523d3SRichard Smith static constexpr int f(); 30dc5523d3SRichard Smith static constexpr int g(); 31851072efSRichard Smith }; 32851072efSRichard Smith }; 33df352058SRichard Smith 34df352058SRichard Smith template<typename T> struct WithPartialSpecialization {}; 3572544f87SRichard Smith template<typename T> struct WithPartialSpecialization<void(T)> { typedef int type; }; 36df352058SRichard Smith typedef WithPartialSpecialization<int*> WithPartialSpecializationUse; 3772544f87SRichard Smith typedef WithPartialSpecialization<void(int)> WithPartialSpecializationUse2; 38871cd4c1SRichard Smith 39871cd4c1SRichard Smith template<typename T> struct WithExplicitSpecialization; 40871cd4c1SRichard Smith typedef WithExplicitSpecialization<int> WithExplicitSpecializationUse; 418c913ecdSRichard Smith 428c913ecdSRichard Smith template<typename T> struct WithImplicitSpecialMembers { int n; }; 43234ff473SRichard Smith 4443ccec8eSRichard Smith template<typename T> struct WithAliasTemplate { 4543ccec8eSRichard Smith template<typename> using X = T; 4643ccec8eSRichard Smith }; 4743ccec8eSRichard Smith 48d08aeb6bSRichard Smith template<typename T> struct WithAnonymousDecls { 49d08aeb6bSRichard Smith struct { bool k; }; 50d08aeb6bSRichard Smith union { int a, b; }; 51d08aeb6bSRichard Smith struct { int c, d; } s; 5201bdb7a9SRichard Smith enum { e = 123 }; 53d08aeb6bSRichard Smith typedef int X; 54d08aeb6bSRichard Smith }; 55d08aeb6bSRichard Smith 56*6739a10cSRichard Smith namespace hidden_specializations { 57*6739a10cSRichard Smith template<typename T> void fn() {} 58*6739a10cSRichard Smith 59*6739a10cSRichard Smith template<typename T> struct cls { 60*6739a10cSRichard Smith static void nested_fn() {} 61*6739a10cSRichard Smith struct nested_cls {}; 62*6739a10cSRichard Smith static int nested_var; 63*6739a10cSRichard Smith enum class nested_enum {}; 64*6739a10cSRichard Smith 65*6739a10cSRichard Smith template<typename U> static void nested_fn_t() {} 66*6739a10cSRichard Smith template<typename U> struct nested_cls_t {}; 67*6739a10cSRichard Smith template<typename U> static int nested_var_t; 68*6739a10cSRichard Smith }; 69*6739a10cSRichard Smith 70*6739a10cSRichard Smith template<typename T> int var; 71*6739a10cSRichard Smith } 72*6739a10cSRichard Smith 73234ff473SRichard Smith #include "cxx-templates-textual.h" 74