1 // Tests of -fdiagnostics-show-template-tree with variadic templates
2 // { dg-options "-fdiagnostics-show-template-tree -std=c++11" }
3
4 template<typename> struct vector {};
5 template<typename, typename> struct map {};
6 template<typename ... Types> struct var {};
7
8 void fn_0(var<>);
9 void fn_1(var<int>);
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> >);
14
test_fn_0()15 void test_fn_0 ()
16 {
17 fn_0 (var<> ());
18 fn_0 (var<int> ()); // { dg-error "could not convert .* from 'var<int>' to 'var<>'" }
19 /* { dg-begin-multiline-output "" }
20 var<
21 [int != ]>
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 "" }
25 var<
26 [int, int != ]>
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<>'" }
30 }
31
test_fn_1()32 void test_fn_1 ()
33 {
34 fn_1 (var<> ()); // { dg-error "could not convert .* from 'var<>' to 'var<int>'" }
35 /* { dg-begin-multiline-output "" }
36 var<
37 [ != int]>
38 { dg-end-multiline-output "" } */
39 fn_1 (var<int> ());
40 fn_1 (var<int, int> ()); // { dg-error "could not convert .* from 'var<int, int>' to 'var<int>'" }
41 /* { dg-begin-multiline-output "" }
42 var<
43 [int, int != int]>
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>'" }
47 }
48
test_fn_2()49 void test_fn_2 ()
50 {
51 fn_2 (var<> ()); // { dg-error "could not convert .* from 'var<>' to 'var<int, int>'" }
52 /* { dg-begin-multiline-output "" }
53 var<
54 [ != int, int]>
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 "" }
58 var<
59 [int != int, int]>
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>'" }
64 }
65
test_fn_3()66 void test_fn_3 ()
67 {
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 "" }
74 vector<
75 var<
76 [int != ]>>
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 "" }
80 vector<
81 var<
82 [int, int != ]>>
83 { dg-end-multiline-output "" } */
84 }
85
test_fn_4()86 void test_fn_4 ()
87 {
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 "" }
93 vector<
94 var<
95 [ != int]>>
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 "" }
100 vector<
101 var<
102 [int, int != int]>>
103 { dg-end-multiline-output "" } */
104 }
105
test_fn_5()106 void test_fn_5 ()
107 {
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 "" }
113 vector<
114 var<
115 [int != int, int]>>
116 { dg-end-multiline-output "" } */
117 fn_5 (vector<var<int, int> >());
118 }
119