diff options
Diffstat (limited to 'test/Modules/Inputs/cxx-templates-a.h')
| -rw-r--r-- | test/Modules/Inputs/cxx-templates-a.h | 31 | 
1 files changed, 31 insertions, 0 deletions
diff --git a/test/Modules/Inputs/cxx-templates-a.h b/test/Modules/Inputs/cxx-templates-a.h index c95dc6325e49..4340910d1e2a 100644 --- a/test/Modules/Inputs/cxx-templates-a.h +++ b/test/Modules/Inputs/cxx-templates-a.h @@ -29,6 +29,8 @@ void use_some_template_a() {    SomeTemplate<char[2]> a;    SomeTemplate<char[1]> b, c;    b = c; + +  (void)&WithImplicitSpecialMembers<int>::n;  }  template<int> struct MergeTemplates; @@ -56,6 +58,7 @@ template<typename T> struct WithPartialSpecialization<T*> {    T &f() { static T t; return t; }  };  typedef WithPartialSpecializationUse::type WithPartialSpecializationInstantiate; +typedef WithPartialSpecialization<void(int)>::type WithPartialSpecializationInstantiate2;  template<> struct WithExplicitSpecialization<int> {    int n; @@ -73,3 +76,31 @@ template<typename T> struct MergeTemplateDefinitions {    static constexpr int g();  };  template<typename T> constexpr int MergeTemplateDefinitions<T>::f() { return 1; } + +template<typename T> using AliasTemplate = T; + +template<typename T> struct PartiallyInstantiatePartialSpec {}; +template<typename T> struct PartiallyInstantiatePartialSpec<T*> { +  static T *foo() { return reinterpret_cast<T*>(0); } +  static T *bar() { return reinterpret_cast<T*>(0); } +}; +typedef PartiallyInstantiatePartialSpec<int*> PartiallyInstantiatePartialSpecHelper; + +void InstantiateWithAliasTemplate(WithAliasTemplate<int>::X<char>); +inline int InstantiateWithAnonymousDeclsA(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); + + +template<typename T1 = int> +struct MergeAnonUnionMember { +  MergeAnonUnionMember() { (void)values.t1; } +  union { int t1; } values; +}; +inline MergeAnonUnionMember<> maum_a() { return {}; } + +template<typename T> struct DontWalkPreviousDeclAfterMerging { struct Inner { typedef T type; }; }; + +namespace TestInjectedClassName { +  template<typename T> struct X { X(); }; +  typedef X<char[1]> A; +}  | 
