aboutsummaryrefslogtreecommitdiff
path: root/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2017-04-20 21:20:51 +0000
committerDimitry Andric <dim@FreeBSD.org>2017-04-20 21:20:51 +0000
commit583e75cce441388bc562fa225d23499261a0091e (patch)
tree5944a7c248d4a8c858db45abc3444eb69270a3c8 /test/SemaCXX/cxx1z-class-template-argument-deduction.cpp
parent7442d6faa2719e4e7d33a7021c406c5a4facd74d (diff)
Diffstat (limited to 'test/SemaCXX/cxx1z-class-template-argument-deduction.cpp')
-rw-r--r--test/SemaCXX/cxx1z-class-template-argument-deduction.cpp35
1 files changed, 35 insertions, 0 deletions
diff --git a/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp b/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp
index d6374e4ce907..5de228ad2857 100644
--- a/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp
+++ b/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp
@@ -213,3 +213,38 @@ namespace transform_params {
};
D d(Y<0, 1, 2>{});
}
+
+namespace variadic {
+ int arr3[3], arr4[4];
+
+ // PR32673
+ template<typename T> struct A {
+ template<typename ...U> A(T, U...);
+ };
+ A a(1, 2, 3);
+
+ template<typename T> struct B {
+ template<int ...N> B(T, int (&...r)[N]);
+ };
+ B b(1, arr3, arr4);
+
+ template<typename T> struct C {
+ template<template<typename> typename ...U> C(T, U<int>...);
+ };
+ C c(1, a, b);
+
+ template<typename ...U> struct X {
+ template<typename T> X(T, U...);
+ };
+ X x(1, 2, 3);
+
+ template<int ...N> struct Y {
+ template<typename T> Y(T, int (&...r)[N]);
+ };
+ Y y(1, arr3, arr4);
+
+ template<template<typename> typename ...U> struct Z {
+ template<typename T> Z(T, U<int>...);
+ };
+ Z z(1, a, b);
+}