| // Various tests for variadic templates and partial specialization. |
| // { dg-do compile { target c++11 } } |
| |
| // PR c++/36846 |
| template<typename A, typename B> |
| struct pair; |
| |
| template<typename... T> |
| struct pairs; |
| |
| template<typename... AS, typename... BS> |
| struct pairs<pair<AS, BS>...> { |
| struct mismatched_packs {}; |
| }; |
| |
| template class pairs< |
| pair<int, int>, |
| pair<int, int> |
| >; |
| |
| template<int A, int B> |
| struct point; |
| |
| template<typename... T> |
| struct points; |
| |
| template<int... AS, int... BS> |
| struct points<point<AS, BS>...> { |
| struct mismatched_packs {}; |
| }; |
| |
| template class points< |
| point<0, 1>, |
| point<0, 1> |
| >; |
| |
| // PR c++/35477 |
| template <class...ARGS> struct tuple {}; |
| template <class A, class B> struct test {}; |
| template <class... ARGS, class B> struct test<B, tuple<ARGS...>> |
| { |
| template <class T> struct inside {}; |
| }; |
| |
| // PR c++/38276 |
| template<typename...> struct A; |
| |
| template<typename, typename> struct B; |
| |
| template<typename... T, typename... U> struct B<A<T...>, A<U...> > |
| { |
| static int i; |
| }; |
| |
| B<A<>, A<int> > b1; |
| |
| B<A<int>, A<> > b2; |
| |
| // PR c++/35784 |
| template <typename...> struct p; |
| |
| template <typename, typename> struct d; |
| |
| template <typename... A, typename... B> |
| struct d<p<A...>, p<B...> > { typedef int t; }; |
| |
| typedef d<p<>, p<int, float> >::t q; |
| typedef d<q, d<p<int>, p<float> >::t> r; // * |
| |
| typedef d<d<p<>, p<int, float> >::t, d<p<>, p<> >::t> s; |