summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaTemplate/pack-deduction.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/test/SemaTemplate/pack-deduction.cpp')
-rw-r--r--clang/test/SemaTemplate/pack-deduction.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/clang/test/SemaTemplate/pack-deduction.cpp b/clang/test/SemaTemplate/pack-deduction.cpp
new file mode 100644
index 00000000000..2d0a03f0fca
--- /dev/null
+++ b/clang/test/SemaTemplate/pack-deduction.cpp
@@ -0,0 +1,20 @@
+// RUN: %clang_cc1 -std=c++11 -verify %s
+
+template<typename ...T> struct X {};
+
+template<typename T, typename U> struct P {};
+
+namespace Nested {
+ template<typename ...T> int f1(X<T, T...>... a); // expected-note +{{conflicting types for parameter 'T'}}
+ template<typename ...T> int f2(P<X<T...>, T> ...a); // expected-note +{{conflicting types for parameter 'T'}}
+
+ int a1 = f1(X<int, int, double>(), X<double, int, double>());
+ int a2 = f1(X<int, int>());
+ int a3 = f1(X<int>(), X<double>()); // expected-error {{no matching}}
+ int a4 = f1(X<int, int>(), X<int>()); // expected-error {{no matching}}
+ int a5 = f1(X<int>(), X<int, int>()); // expected-error {{no matching}}
+ int a6 = f1(X<int, int, int>(), X<int, int, int>(), X<int, int, int, int>()); // expected-error {{no matching}}
+
+ int b1 = f2(P<X<int, double>, int>(), P<X<int, double>, double>());
+ int b2 = f2(P<X<int, double>, int>(), P<X<int, double>, double>(), P<X<int, double>, char>()); // expected-error {{no matching}}
+}
OpenPOWER on IntegriCloud