diff options
| author | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-05-29 01:12:14 +0000 |
|---|---|---|
| committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-05-29 01:12:14 +0000 |
| commit | 0a80d572b1868952d9e8de147a548b645a9504a2 (patch) | |
| tree | 69854da867ba91d76be929a0baff1459e8df4a5c /clang/test/SemaTemplate/pack-deduction.cpp | |
| parent | 2de60eb2138604f54bc2f3465d85a080140b6def (diff) | |
| download | bcm5719-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.cpp | 20 |
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}} +} |

