1 // { dg-options "-fdiagnostics-show-template-tree" }
2 
3 template<typename> struct vector {};
4 template<typename, typename> struct map {};
5 template<int> struct arr {};
6 
7 void fn_1(vector<int>);
8 void fn_2(map<int, int>);
9 void fn_3(vector<map<int, float> >);
10 void takes_arr_10 (arr<10>);
11 
test()12 void test ()
13 {
14   fn_1 (vector<int> ());
15   fn_1 (42); // { dg-error "could not convert '42' from 'int' to 'vector<int>'" }
16   fn_1 (vector<double> ()); // { dg-error "could not convert .* from 'vector<double>' to 'vector<int>'" }
17   /* { dg-begin-multiline-output "" }
18   vector<
19     [double != int]>
20      { dg-end-multiline-output "" } */
21   fn_1 (map<int, int> ()); // { dg-error "could not convert .* from 'map<int, int>' to 'vector<int>'" }
22 
23   fn_2 (map<int, int>());
24   fn_2 (map<int, double>());  // { dg-error "could not convert .* from 'map<.\\.\\.\\..,double>. to .map<.\\.\\.\\..,int>'" }
25   /* { dg-begin-multiline-output "" }
26   map<
27     [...],
28     [double != int]>
29      { dg-end-multiline-output "" } */
30   fn_2 (map<double, double>());  // { dg-error "could not convert .* from .map<double,double>. to .map<int,int>." }
31   /* { dg-begin-multiline-output "" }
32   map<
33     [double != int],
34     [double != int]>
35      { dg-end-multiline-output "" } */
36 
37   fn_3 (vector<map<int, float> >());
38   fn_3 (vector<map<int, double> >());  // { dg-error "could not convert .* from 'vector<map<.\\.\\.\\..,double>>' to 'vector<map<.\\.\\.\\..,float>>'" }
39   /* { dg-begin-multiline-output "" }
40   vector<
41     map<
42       [...],
43       [double != float]>>
44      { dg-end-multiline-output "" } */
45 
46   takes_arr_10 (arr<5>()); // { dg-error "could not convert '.*' from 'arr<5>' to 'arr<10>'" }
47   /* { dg-begin-multiline-output "" }
48   arr<
49     [5 != 10]>
50      { dg-end-multiline-output "" } */
51 }
52