1 // { dg-options "-fdiagnostics-show-template-tree" }
2
3 /* Example of default template args, and various kinds of mismatch. */
4
5 template <int = 0, int = 1, int = 2>
6 struct s {};
7
8 void takes_s (s<> );
9 void takes_s013 (s<0, 1, 3> );
10 void takes_s321 (s<3, 2, 1> );
11
test()12 void test ()
13 {
14 takes_s (s<>());
15 takes_s (s<0, 1>());
16 takes_s (s<0, 1, 2>());
17 takes_s (s<0, 2>()); // { dg-error "could not convert '.*' from 's<.\\.\\.\\..,2>' to 's<.\\.\\.\\..,1>'" }
18 /* { dg-begin-multiline-output "" }
19 s<
20 [...],
21 [2 != 1]>
22 { dg-end-multiline-output "" } */
23
24 takes_s (s<1>()); // { dg-error "could not convert '.*' from 's<1>' to 's<0>'" }
25 /* { dg-begin-multiline-output "" }
26 s<
27 [1 != 0]>
28 { dg-end-multiline-output "" } */
29
30 takes_s (s<0, 1, 3>()); // { dg-error "could not convert '.*' from 's<.\\.\\.\\..,.\\.\\.\\..,3>' to 's<.\\.\\.\\..,.\\.\\.\\..,2>'" }
31 /* { dg-begin-multiline-output "" }
32 s<
33 [...],
34 [...],
35 [3 != 2]>
36 { dg-end-multiline-output "" } */
37
38 takes_s (s<3, 2, 0>()); // { dg-error "could not convert '.*' from 's<3,2,0>' to 's<0,1,2>'" }
39 /* { dg-begin-multiline-output "" }
40 s<
41 [3 != 0],
42 [2 != 1],
43 [0 != 2]>
44 { dg-end-multiline-output "" } */
45
46 takes_s (s<3, 2, 1>()); // { dg-error "could not convert '.*' from 's<3,2,1>' to 's<0,1,2>'" }
47 /* { dg-begin-multiline-output "" }
48 s<
49 [3 != 0],
50 [2 != 1],
51 [1 != 2]>
52 { dg-end-multiline-output "" } */
53
54 takes_s013 (s<0, 1, 2>()); // { dg-error "could not convert '.*' from 's<.\\.\\.\\..,.\\.\\.\\..,2>' to 's<.\\.\\.\\..,.\\.\\.\\..,3>'" }
55 /* { dg-begin-multiline-output "" }
56 s<
57 [...],
58 [...],
59 [2 != 3]>
60 { dg-end-multiline-output "" } */
61
62 takes_s321 (s<>()); // { dg-error "could not convert '.*' from 's<0,1,2>' to 's<3,2,1>'" }
63 /* { dg-begin-multiline-output "" }
64 s<
65 [0 != 3],
66 [1 != 2],
67 [2 != 1]>
68 { dg-end-multiline-output "" } */
69
70 takes_s321 (s<0, 1, 3>()); // { dg-error "could not convert '.*' from 's<0,1,3>' to 's<3,2,1>'" }
71 /* { dg-begin-multiline-output "" }
72 s<
73 [0 != 3],
74 [1 != 2],
75 [3 != 1]>
76 { dg-end-multiline-output "" } */
77
78 takes_s321 (s<3, 2, 0>()); // { dg-error "could not convert '.*' from 's<.\\.\\.\\..,.\\.\\.\\..,0>' to 's<.\\.\\.\\..,.\\.\\.\\..,1>'" }
79 /* { dg-begin-multiline-output "" }
80 s<
81 [...],
82 [...],
83 [0 != 1]>
84 { dg-end-multiline-output "" } */
85
86 takes_s321 (s<3, 2, 1>());
87
88 takes_s321 (s<1, 2, 3>()); // { dg-error "could not convert '.*' from 's<1,.\\.\\.\\..,3>' to 's<3,.\\.\\.\\..,1>'" }
89 /* { dg-begin-multiline-output "" }
90 s<
91 [1 != 3],
92 [...],
93 [3 != 1]>
94 { dg-end-multiline-output "" } */
95 }
96