diff options
Diffstat (limited to 'test/Modules/Inputs/cxx-templates-b.h')
-rw-r--r-- | test/Modules/Inputs/cxx-templates-b.h | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/test/Modules/Inputs/cxx-templates-b.h b/test/Modules/Inputs/cxx-templates-b.h index efd07c617e52..d763c8040ba3 100644 --- a/test/Modules/Inputs/cxx-templates-b.h +++ b/test/Modules/Inputs/cxx-templates-b.h @@ -24,6 +24,11 @@ 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; }; @@ -46,6 +51,8 @@ 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; @@ -55,6 +62,8 @@ 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; @@ -63,6 +72,16 @@ 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); @@ -71,4 +90,6 @@ template<typename T> void UseDefinedInBImplIndirectly(T &v) { void TriggerInstantiation() { UseDefinedInBImpl<void>(); Std::f<int>(); + PartiallyInstantiatePartialSpec<int*>::foo(); + WithPartialSpecialization<void(int)>::type x; } |