1 // RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s
3 // Note: Partial ordering of function templates containing template
4 // parameter packs is independent of the number of deduced arguments
5 // for those template parameter packs.
6 template<class ...> struct Tuple
{ };
7 template<class ... Types
> int &g(Tuple
<Types
...>); // #1
8 template<class T1
, class ... Types
> float &g(Tuple
<T1
, Types
...>); // #2
9 template<class T1
, class ... Types
> double &g(Tuple
<T1
, Types
& ...>); // #3
12 int &ir1
= g(Tuple
<>());
13 float &fr1
= g(Tuple
<int, float>());
14 double &dr1
= g(Tuple
<int, float&>());
15 double &dr2
= g(Tuple
<int>());
18 template<class ... Types
> int &h(int (*)(Types
...)); // #1
19 template<class T1
, class ... Types
> float &h(int (*)(T1
, Types
...)); // #2
20 template<class T1
, class ... Types
> double &h(int (*)(T1
, Types
& ...)); // #3
23 int &ir1
= h((int(*)())0);
24 float &fr1
= h((int(*)(int, float))0);
25 double &dr1
= h((int(*)(int, float&))0);
26 double &dr2
= h((int(*)(int))0);
31 template <int I
> struct ref
{};
33 template <int... L
> void map(ref
<L
>...);
34 template <int head
, int... tail
> void map(ref
<head
> x
, ref
<tail
>... xs
); // expected-note {{here}}
36 template void map
<0, 1>(ref
<0>, ref
<1>);
37 // expected-error@-1 {{explicit instantiation of undefined function template 'map'}}