|  | @import cxx_templates_common; | 
|  |  | 
|  | template<typename T> T f(); | 
|  | template<typename T> T f(T t) { return t; } | 
|  | namespace N { | 
|  | template<typename T> T f(); | 
|  | template<typename T> T f(T t) { return t; } | 
|  | } | 
|  |  | 
|  | template<typename> int template_param_kinds_1(); | 
|  | template<template<typename, int, int...> class> int template_param_kinds_2(); | 
|  | template<template<typename T, typename U, U> class> int template_param_kinds_3(); | 
|  |  | 
|  | template<typename T> struct SomeTemplate<T&> {}; | 
|  | template<typename T> struct SomeTemplate<T&>; | 
|  | typedef SomeTemplate<int&> SomeTemplateIntRef; | 
|  |  | 
|  | extern DefinedInCommon &defined_in_common; | 
|  |  | 
|  | template<int> struct MergeTemplates; | 
|  | MergeTemplates<0> *merge_templates_b; | 
|  |  | 
|  | template<typename T> template<typename U> | 
|  | constexpr int Outer<T>::Inner<U>::g() { return 2; } | 
|  | static_assert(Outer<int>::Inner<int>::g() == 2, ""); | 
|  |  | 
|  | namespace TestInjectedClassName { | 
|  | template<typename T> struct X { X(); }; | 
|  | typedef X<char[2]> B; | 
|  | } | 
|  |  | 
|  | @import cxx_templates_b_impl; | 
|  |  | 
|  | template<typename T, typename> struct Identity { typedef T type; }; | 
|  | template<typename T> void UseDefinedInBImpl() { | 
|  | typename Identity<DefinedInBImpl, T>::type dependent; | 
|  | FoundByADL(dependent); | 
|  | typename Identity<DefinedInBImpl, T>::type::Inner inner; | 
|  | dependent.f(); | 
|  | } | 
|  |  | 
|  | extern DefinedInBImpl &defined_in_b_impl; | 
|  |  | 
|  | template<typename T> | 
|  | struct RedeclareTemplateAsFriend { | 
|  | template<typename U> | 
|  | friend struct RedeclaredAsFriend; | 
|  | }; | 
|  |  | 
|  | void use_some_template_b() { | 
|  | SomeTemplate<char[1]> a; | 
|  | SomeTemplate<char[2]> b, c; | 
|  | b = c; | 
|  |  | 
|  | WithImplicitSpecialMembers<int> wism1, wism2(wism1); | 
|  | } | 
|  |  | 
|  | auto enum_b_from_b = CommonTemplate<int>::b; | 
|  | const auto enum_c_from_b = CommonTemplate<int>::c; | 
|  |  | 
|  | template<int> struct UseInt; | 
|  | template<typename T> void UseRedeclaredEnum(UseInt<T() + CommonTemplate<char>::a>); | 
|  | constexpr void (*UseRedeclaredEnumB)(UseInt<1>) = UseRedeclaredEnum<int>; | 
|  |  | 
|  | typedef WithPartialSpecialization<void(int)>::type WithPartialSpecializationInstantiate3; | 
|  |  | 
|  | template<typename> struct MergeSpecializations; | 
|  | template<typename T> struct MergeSpecializations<T&> { | 
|  | typedef int partially_specialized_in_b; | 
|  | }; | 
|  | template<> struct MergeSpecializations<double> { | 
|  | typedef int explicitly_specialized_in_b; | 
|  | }; | 
|  |  | 
|  | template<typename U> using AliasTemplate = U; | 
|  |  | 
|  | void InstantiateWithAliasTemplate(WithAliasTemplate<int>::X<char>); | 
|  | inline int InstantiateWithAnonymousDeclsB(WithAnonymousDecls<int> x) { | 
|  | return (x.k ? x.a : x.b) + (x.k ? x.s.c : x.s.d) + x.e; | 
|  | } | 
|  | inline int InstantiateWithAnonymousDeclsB2(WithAnonymousDecls<char> x) { | 
|  | return (x.k ? x.a : x.b) + (x.k ? x.s.c : x.s.d) + x.e; | 
|  | } | 
|  |  | 
|  | @import cxx_templates_a; | 
|  | template<typename T> void UseDefinedInBImplIndirectly(T &v) { | 
|  | PerformDelayedLookup(v); | 
|  | } | 
|  |  | 
|  | void TriggerInstantiation() { | 
|  | UseDefinedInBImpl<void>(); | 
|  | Std::f<int>(); | 
|  | PartiallyInstantiatePartialSpec<int*>::foo(); | 
|  | WithPartialSpecialization<void(int)>::type x; | 
|  | } |