1 // Tests of -fdiagnostics-show-template-tree with variadic templates
2 // { dg-options "-fdiagnostics-show-template-tree -std=c++11" }
4 template<typename> struct vector {};
5 template<typename, typename> struct map {};
6 template<typename ... Types> struct var {};
10 void fn_2(var<int, int>);
11 void fn_3(vector<var<> >);
12 void fn_4(vector<var<int> >);
13 void fn_5(vector<var<int, int> >);
18 fn_0 (var<int> ()); // { dg-error "could not convert .* from 'var<int>' to 'var<>'" }
19 /* { dg-begin-multiline-output "" }
22 { dg-end-multiline-output "" } */
23 fn_0 (var<int, int> ()); // { dg-error "could not convert .* from 'var<int, int>' to 'var<>'" }
24 /* { dg-begin-multiline-output "" }
27 { dg-end-multiline-output "" } */
28 fn_0 (vector<var<int> >()); // { dg-error "could not convert .* from 'vector<var<int> >' to 'var<>'" }
29 fn_0 (vector<var<int, int> >()); // { dg-error "could not convert .* from 'vector<var<int, int> >' to 'var<>'" }
34 fn_1 (var<> ()); // { dg-error "could not convert .* from 'var<>' to 'var<int>'" }
35 /* { dg-begin-multiline-output "" }
38 { dg-end-multiline-output "" } */
40 fn_1 (var<int, int> ()); // { dg-error "could not convert .* from 'var<int, int>' to 'var<int>'" }
41 /* { dg-begin-multiline-output "" }
44 { dg-end-multiline-output "" } */
45 fn_1 (vector<var<int> >()); // { dg-error "could not convert .* from 'vector<var<int> >' to 'var<int>'" }
46 fn_1 (vector<var<int, int> >()); // { dg-error "could not convert .* from 'vector<var<int, int> >' to 'var<int>'" }
51 fn_2 (var<> ()); // { dg-error "could not convert .* from 'var<>' to 'var<int, int>'" }
52 /* { dg-begin-multiline-output "" }
55 { dg-end-multiline-output "" } */
56 fn_2 (var<int> ()); // { dg-error "could not convert .* from 'var<int>' to 'var<int, int>'" }
57 /* { dg-begin-multiline-output "" }
60 { dg-end-multiline-output "" } */
61 fn_2 (var<int, int> ());
62 fn_2 (vector<var<int> >()); // { dg-error "could not convert .* from 'vector<var<int> >' to 'var<int, int>'" }
63 fn_2 (vector<var<int, int> >()); // { dg-error "could not convert .* from 'vector<var<int, int> >' to 'var<int, int>'" }
68 fn_3 (var<> ()); // { dg-error "could not convert .* from 'var<>' to 'vector<var<> >'" }
69 fn_3 (var<int> ()); // { dg-error "could not convert .* from 'var<int>' to 'vector<var<> >'" }
70 fn_3 (var<int, int> ()); // { dg-error "could not convert .* from 'var<int, int>' to 'vector<var<> >'" }
71 fn_3 (vector<var<> >());
72 fn_3 (vector<var<int> >()); // { dg-error "could not convert .* from 'vector<var<int>>' to 'vector<var<>>'" }
73 /* { dg-begin-multiline-output "" }
77 { dg-end-multiline-output "" } */
78 fn_3 (vector<var<int, int> >()); // { dg-error "could not convert .* from 'vector<var<int, int>>' to 'vector<var<>>'" }
79 /* { dg-begin-multiline-output "" }
83 { dg-end-multiline-output "" } */
88 fn_4 (var<> ()); // { dg-error "could not convert .* from 'var<>' to 'vector<var<int> >'" }
89 fn_4 (var<int> ()); // { dg-error "could not convert .* from 'var<int>' to 'vector<var<int> >'" }
90 fn_4 (var<int, int> ()); // { dg-error "could not convert .* from 'var<int, int>' to 'vector<var<int> >'" }
91 fn_4 (vector<var<> >()); // { dg-error "could not convert .* from 'vector<var<>>' to 'vector<var<int>>'" }
92 /* { dg-begin-multiline-output "" }
96 { dg-end-multiline-output "" } */
97 fn_4 (vector<var<int> >());
98 fn_4 (vector<var<int, int> >()); // { dg-error "could not convert .* from 'vector<var<int, int>>' to 'vector<var<int>>'" }
99 /* { dg-begin-multiline-output "" }
103 { dg-end-multiline-output "" } */
108 fn_5 (var<> ()); // { dg-error "could not convert .* from 'var<>' to 'vector<var<int, int> >'" }
109 fn_5 (var<int> ()); // { dg-error "could not convert .* from 'var<int>' to 'vector<var<int, int> >'" }
110 fn_5 (var<int, int> ()); // { dg-error "could not convert .* from 'var<int, int>' to 'vector<var<int, int> >'" }
111 fn_5 (vector<var<int> >()); // { dg-error "could not convert .* from 'vector<var<int>>' to 'vector<var<int, int>>'" }
112 /* { dg-begin-multiline-output "" }
116 { dg-end-multiline-output "" } */
117 fn_5 (vector<var<int, int> >());