summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaTemplate/pack-deduction.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2014-05-29 01:12:14 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2014-05-29 01:12:14 +0000
commit0a80d572b1868952d9e8de147a548b645a9504a2 (patch)
tree69854da867ba91d76be929a0baff1459e8df4a5c /clang/test/SemaTemplate/pack-deduction.cpp
parent2de60eb2138604f54bc2f3465d85a080140b6def (diff)
downloadbcm5719-llvm-0a80d572b1868952d9e8de147a548b645a9504a2.tar.gz
bcm5719-llvm-0a80d572b1868952d9e8de147a548b645a9504a2.zip
PR19878: If a pack expansion appears within another pack expansion, correctly
deduce any packs that are expanded by both expansions. llvm-svn: 209786
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