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 c95dc63..4340910 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; +} |