Home | History | Annotate | Download | only in Inputs
      1 @import cxx_templates_common;
      2 
      3 template<typename T> T f();
      4 template<typename T> T f(T t) { return t; }
      5 namespace N {
      6   template<typename T> T f();
      7   template<typename T> T f(T t) { return t; }
      8 }
      9 
     10 template<typename> int template_param_kinds_1();
     11 template<template<typename, int, int...> class> int template_param_kinds_2();
     12 template<template<typename T, typename U, U> class> int template_param_kinds_3();
     13 
     14 template<typename T> struct SomeTemplate<T&> {};
     15 template<typename T> struct SomeTemplate<T&>;
     16 typedef SomeTemplate<int&> SomeTemplateIntRef;
     17 
     18 extern DefinedInCommon &defined_in_common;
     19 
     20 template<int> struct MergeTemplates;
     21 MergeTemplates<0> *merge_templates_b;
     22 
     23 @import cxx_templates_b_impl;
     24 
     25 template<typename T, typename> struct Identity { typedef T type; };
     26 template<typename T> void UseDefinedInBImpl() {
     27   typename Identity<DefinedInBImpl, T>::type dependent;
     28   FoundByADL(dependent);
     29   typename Identity<DefinedInBImpl, T>::type::Inner inner;
     30   dependent.f();
     31 }
     32 
     33 extern DefinedInBImpl &defined_in_b_impl;
     34 
     35 template<typename T>
     36 struct RedeclareTemplateAsFriend {
     37   template<typename U>
     38   friend struct RedeclaredAsFriend;
     39 };
     40 
     41 void use_some_template_b() {
     42   SomeTemplate<char[1]> a;
     43   SomeTemplate<char[2]> b, c;
     44   b = c;
     45 }
     46 
     47 auto enum_b_from_b = CommonTemplate<int>::b;
     48 const auto enum_c_from_b = CommonTemplate<int>::c;
     49 
     50 template<int> struct UseInt;
     51 template<typename T> void UseRedeclaredEnum(UseInt<T() + CommonTemplate<char>::a>);
     52 constexpr void (*UseRedeclaredEnumB)(UseInt<1>) = UseRedeclaredEnum<int>;
     53 
     54 template<typename> struct MergeSpecializations;
     55 template<typename T> struct MergeSpecializations<T&> {
     56   typedef int partially_specialized_in_b;
     57 };
     58 template<> struct MergeSpecializations<double> {
     59   typedef int explicitly_specialized_in_b;
     60 };
     61 
     62 @import cxx_templates_a;
     63 template<typename T> void UseDefinedInBImplIndirectly(T &v) {
     64   PerformDelayedLookup(v);
     65 }
     66 
     67 void TriggerInstantiation() {
     68   UseDefinedInBImpl<void>();
     69   Std::f<int>();
     70 }
     71