diff options
Diffstat (limited to 'test/SemaTemplate/deduction.cpp')
-rw-r--r-- | test/SemaTemplate/deduction.cpp | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/test/SemaTemplate/deduction.cpp b/test/SemaTemplate/deduction.cpp index 6826774a0020..d024c3147735 100644 --- a/test/SemaTemplate/deduction.cpp +++ b/test/SemaTemplate/deduction.cpp @@ -218,3 +218,50 @@ namespace NonDeducedNestedNameSpecifier { template<typename T> int f(A<T>, typename A<T>::template B<T>); int k = f(A<int>(), 0); } + +namespace PR27601_RecursivelyInheritedBaseSpecializationsDeductionAmbiguity { +namespace ns1 { + +template<class...> struct B { }; +template<class H, class ... Ts> struct B<H, Ts...> : B<> { }; +template<class ... Ts> struct D : B<Ts...> { }; + +template<class T, class ... Ts> void f(B<T, Ts...> &) { } + +int main() { + D<int, char> d; + f<int>(d); +} +} //end ns1 + +namespace ns2 { + +template <int i, typename... Es> struct tup_impl; + +template <int i> struct tup_impl<i> {}; // empty tail + +template <int i, typename Head, typename... Tail> +struct tup_impl<i, Head, Tail...> : tup_impl<i + 1, Tail...> { + using value_type = Head; + Head head; +}; + +template <typename... Es> struct tup : tup_impl<0, Es...> {}; + +template <typename Head, int i, typename... Tail> +Head &get_helper(tup_impl<i, Head, Tail...> &t) { + return t.head; +} + +template <typename Head, int i, typename... Tail> +Head const &get_helper(tup_impl<i, Head, Tail...> const &t) { + return t.head; +} + +int main() { + tup<int, double, char> t; + get_helper<double>(t); + return 0; +} +} // end ns2 +}
\ No newline at end of file |