196e7813f08c6adf1d8657b0da86741b54e850fd7Rafael Espindola// RUN: not %clang_cc1 -fsyntax-only -fcolor-diagnostics %s 2>&1 | FileCheck %s
296e7813f08c6adf1d8657b0da86741b54e850fd7Rafael Espindola// RUN: not %clang_cc1 -fsyntax-only -fcolor-diagnostics -fdiagnostics-show-template-tree %s 2>&1 | FileCheck %s -check-prefix=TREE
30ca4be3c9a29dbebc89a4c1834ac684e48d231f2NAKAMURA Takumi// REQUIRES: ansi-escape-sequences
450badd523b9b90c0731423d002b13a00bf754036David Blaikietemplate<typename> struct foo {};
550badd523b9b90c0731423d002b13a00bf754036David Blaikievoid func(foo<int>);
650badd523b9b90c0731423d002b13a00bf754036David Blaikieint main() {
750badd523b9b90c0731423d002b13a00bf754036David Blaikie  func(foo<double>());
850badd523b9b90c0731423d002b13a00bf754036David Blaikie}
91a1b3ab6d763316078ad03a817d2eb58e6156d9bNAKAMURA Takumi// CHECK: {{.*}}candidate function not viable: no known conversion from 'foo<[[CYAN:.\[0;1;36m]]double[[RESET:.\[0m]]>' to 'foo<[[CYAN]]int[[RESET]]>' for 1st argument[[RESET]]
10648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument
11529cdf4c2ef0985dd6f4b7b68ab76e6a1a5082d5Richard Trieu// TREE:  foo<
121a1b3ab6d763316078ad03a817d2eb58e6156d9bNAKAMURA Takumi// TREE:    {{\[}}[[CYAN:.\[0;1;36m]]double[[RESET:.\[0m]] != [[CYAN]]int[[RESET]]]>[[RESET]]
13529cdf4c2ef0985dd6f4b7b68ab76e6a1a5082d5Richard Trieu
14529cdf4c2ef0985dd6f4b7b68ab76e6a1a5082d5Richard Trieufoo<int> A;
15529cdf4c2ef0985dd6f4b7b68ab76e6a1a5082d5Richard Trieufoo<double> &B = A;
161a1b3ab6d763316078ad03a817d2eb58e6156d9bNAKAMURA Takumi// CHECK: {{.*}}non-const lvalue reference to type 'foo<[[CYAN]]double[[RESET]][[BOLD:.\[1m]]>' cannot bind to a value of unrelated type 'foo<[[CYAN]]int[[RESET]][[BOLD]]>'[[RESET]]
17648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// TREE: non-const lvalue reference cannot bind to a value of unrelated type
18529cdf4c2ef0985dd6f4b7b68ab76e6a1a5082d5Richard Trieu// TREE:   foo<
191a1b3ab6d763316078ad03a817d2eb58e6156d9bNAKAMURA Takumi// TREE:     {{\[}}[[CYAN]]double[[RESET]][[BOLD:.\[1m]] != [[CYAN]]int[[RESET]][[BOLD]]]>[[RESET]]
203c88301b551add30e9a4b59af325534643dc4b21Richard Trieu
213c88301b551add30e9a4b59af325534643dc4b21Richard Trieutemplate<typename> class vector {};
223c88301b551add30e9a4b59af325534643dc4b21Richard Trieu
233c88301b551add30e9a4b59af325534643dc4b21Richard Trieuvoid set15(vector<const vector<int> >) {}
243c88301b551add30e9a4b59af325534643dc4b21Richard Trieuvoid test15() {
253c88301b551add30e9a4b59af325534643dc4b21Richard Trieu  set15(vector<const vector<const int> >());
263c88301b551add30e9a4b59af325534643dc4b21Richard Trieu}
271a1b3ab6d763316078ad03a817d2eb58e6156d9bNAKAMURA Takumi// CHECK: {{.*}}candidate function not viable: no known conversion from 'vector<const vector<[[CYAN]]const{{ ?}}[[RESET]]{{ ?}}int>>' to 'vector<const vector<int>>' for 1st argument
283c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// TREE: {{.*}}candidate function not viable: no known conversion from argument type to parameter type for 1st argument
293c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// TREE:   vector<
303c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// TREE:     const vector<
311a1b3ab6d763316078ad03a817d2eb58e6156d9bNAKAMURA Takumi// TREE:       {{\[}}[[CYAN]]const{{ ?}}[[RESET]]{{ ?}}!= [[CYAN]](no qualifiers)[[RESET]]] int>>
323c88301b551add30e9a4b59af325534643dc4b21Richard Trieu
333c88301b551add30e9a4b59af325534643dc4b21Richard Trieuvoid set16(vector<vector<int> >) {}
343c88301b551add30e9a4b59af325534643dc4b21Richard Trieuvoid test16() {
353c88301b551add30e9a4b59af325534643dc4b21Richard Trieu  set16(vector<const vector<int> >());
363c88301b551add30e9a4b59af325534643dc4b21Richard Trieu}
371a1b3ab6d763316078ad03a817d2eb58e6156d9bNAKAMURA Takumi// CHECK: {{.*}}candidate function not viable: no known conversion from 'vector<[[CYAN]]const{{ ?}}[[RESET]]{{ ?}}vector<[...]>>' to 'vector<vector<[...]>>' for 1st argument
383c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// TREE: {{.*}}candidate function not viable: no known conversion from argument type to parameter type for 1st argument
393c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// TREE:   vector<
401a1b3ab6d763316078ad03a817d2eb58e6156d9bNAKAMURA Takumi// TREE:     {{\[}}[[CYAN]]const{{ ?}}[[RESET]]{{ ?}}!= [[CYAN]](no qualifiers){{ ?}}[[RESET]]]{{ ?}}vector<
413c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// TREE:       [...]>>
423c88301b551add30e9a4b59af325534643dc4b21Richard Trieu
433c88301b551add30e9a4b59af325534643dc4b21Richard Trieuvoid set17(vector<const vector<int> >) {}
443c88301b551add30e9a4b59af325534643dc4b21Richard Trieuvoid test17() {
453c88301b551add30e9a4b59af325534643dc4b21Richard Trieu  set17(vector<vector<int> >());
463c88301b551add30e9a4b59af325534643dc4b21Richard Trieu}
471a1b3ab6d763316078ad03a817d2eb58e6156d9bNAKAMURA Takumi// CHECK: candidate function not viable: no known conversion from 'vector<vector<[...]>>' to 'vector<[[CYAN]]const{{ ?}}[[RESET]]{{ ?}}vector<[...]>>' for 1st argument
483c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument
493c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// TREE:   vector<
501a1b3ab6d763316078ad03a817d2eb58e6156d9bNAKAMURA Takumi// TREE:     {{\[}}[[CYAN]](no qualifiers){{ ?}}[[RESET]]{{ ?}}!= [[CYAN]]const[[RESET]]] vector<
513c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// TREE:       [...]>>
523c88301b551add30e9a4b59af325534643dc4b21Richard Trieu
533c88301b551add30e9a4b59af325534643dc4b21Richard Trieuvoid set18(vector<volatile vector<int> >) {}
543c88301b551add30e9a4b59af325534643dc4b21Richard Trieuvoid test18() {
553c88301b551add30e9a4b59af325534643dc4b21Richard Trieu  set18(vector<const vector<int> >());
563c88301b551add30e9a4b59af325534643dc4b21Richard Trieu}
571a1b3ab6d763316078ad03a817d2eb58e6156d9bNAKAMURA Takumi// CHECK: candidate function not viable: no known conversion from 'vector<[[CYAN]]const{{ ?}}[[RESET]]{{ ?}}vector<[...]>>' to 'vector<[[CYAN]]volatile{{ ?}}[[RESET]]{{ ?}}vector<[...]>>' for 1st argument
583c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// TREE: no matching function for call to 'set18'
593c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument
603c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// TREE:   vector<
611a1b3ab6d763316078ad03a817d2eb58e6156d9bNAKAMURA Takumi// TREE:     {{\[}}[[CYAN]]const{{ ?}}[[RESET]]{{ ?}}!= [[CYAN]]volatile[[RESET]]] vector<
623c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// TREE:       [...]>>
633c88301b551add30e9a4b59af325534643dc4b21Richard Trieu
643c88301b551add30e9a4b59af325534643dc4b21Richard Trieuvoid set19(vector<const volatile vector<int> >) {}
653c88301b551add30e9a4b59af325534643dc4b21Richard Trieuvoid test19() {
663c88301b551add30e9a4b59af325534643dc4b21Richard Trieu  set19(vector<const vector<int> >());
673c88301b551add30e9a4b59af325534643dc4b21Richard Trieu}
681a1b3ab6d763316078ad03a817d2eb58e6156d9bNAKAMURA Takumi// CHECK: candidate function not viable: no known conversion from 'vector<const vector<[...]>>' to 'vector<const [[CYAN]]volatile{{ ?}}[[RESET]]{{ ?}}vector<[...]>>' for 1st argument
693c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument
703c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// TREE:   vector<
711a1b3ab6d763316078ad03a817d2eb58e6156d9bNAKAMURA Takumi// TREE:     [const != const [[CYAN]]volatile[[RESET]]] vector<
723c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// TREE:       [...]>>
7370e82dc7a254054f0de491493489da162e63c364Richard Trieu
7470e82dc7a254054f0de491493489da162e63c364Richard Trieunamespace default_args {
7570e82dc7a254054f0de491493489da162e63c364Richard Trieu  template <int x, int y = 1+1, int z = 2>
7670e82dc7a254054f0de491493489da162e63c364Richard Trieu  class A {};
7770e82dc7a254054f0de491493489da162e63c364Richard Trieu
7870e82dc7a254054f0de491493489da162e63c364Richard Trieu  void foo(A<0> &M) {
7970e82dc7a254054f0de491493489da162e63c364Richard Trieu    // CHECK: no viable conversion from 'A<[...], (default) [[CYAN]]1 + 1[[RESET]][[BOLD]] aka [[CYAN]]2[[RESET]][[BOLD]], (default) [[CYAN]]2[[RESET]][[BOLD]]>' to 'A<[...], [[CYAN]]0[[RESET]][[BOLD]], [[CYAN]]0[[RESET]][[BOLD]]>'
8070e82dc7a254054f0de491493489da162e63c364Richard Trieu    A<0, 0, 0> N = M;
8170e82dc7a254054f0de491493489da162e63c364Richard Trieu
8270e82dc7a254054f0de491493489da162e63c364Richard Trieu    // CHECK: no viable conversion from 'A<[2 * ...], (default) [[CYAN]]2[[RESET]][[BOLD]]>' to 'A<[2 * ...], [[CYAN]]0[[RESET]][[BOLD]]>'
8370e82dc7a254054f0de491493489da162e63c364Richard Trieu    A<0, 2, 0> N2 = M;
8470e82dc7a254054f0de491493489da162e63c364Richard Trieu  }
8570e82dc7a254054f0de491493489da162e63c364Richard Trieu
8670e82dc7a254054f0de491493489da162e63c364Richard Trieu}
87