150badd523b9b90c0731423d002b13a00bf754036David Blaikie// RUN: %clang_cc1 -fsyntax-only -fcolor-diagnostics %s 2>&1 | FileCheck %s
2529cdf4c2ef0985dd6f4b7b68ab76e6a1a5082d5Richard Trieu// RUN: %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}
950badd523b9b90c0731423d002b13a00bf754036David Blaikie// CHECK: {{.*}}candidate function not viable: no known conversion from 'foo<{{.}}[0;1;36mdouble{{.}}[0m>' to 'foo<{{.}}[0;1;36mint{{.}}[0m>' for 1st argument{{.}}[0m
10648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument
11529cdf4c2ef0985dd6f4b7b68ab76e6a1a5082d5Richard Trieu// TREE:  foo<
12529cdf4c2ef0985dd6f4b7b68ab76e6a1a5082d5Richard Trieu// TREE:    [{{.}}[0;1;36mdouble{{.}}[0m != {{.}}[0;1;36mint{{.}}[0m]>{{.}}[0m
13529cdf4c2ef0985dd6f4b7b68ab76e6a1a5082d5Richard Trieu
14529cdf4c2ef0985dd6f4b7b68ab76e6a1a5082d5Richard Trieufoo<int> A;
15529cdf4c2ef0985dd6f4b7b68ab76e6a1a5082d5Richard Trieufoo<double> &B = A;
16529cdf4c2ef0985dd6f4b7b68ab76e6a1a5082d5Richard Trieu// CHECK: {{.*}}non-const lvalue reference to type 'foo<{{.}}[0;1;36mdouble{{.}}[0m{{.}}[1m>' cannot bind to a value of unrelated type 'foo<{{.}}[0;1;36mint{{.}}[0m{{.}}[1m>'{{.}}[0m
17648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// TREE: non-const lvalue reference cannot bind to a value of unrelated type
18529cdf4c2ef0985dd6f4b7b68ab76e6a1a5082d5Richard Trieu// TREE:   foo<
19529cdf4c2ef0985dd6f4b7b68ab76e6a1a5082d5Richard Trieu// TREE:     [{{.}}[0;1;36mdouble{{.}}[0m{{.}}[1m != {{.}}[0;1;36mint{{.}}[0m{{.}}[1m]>{{.}}[0m
20