196e7813f08c6adf1d8657b0da86741b54e850fd7Rafael Espindola// RUN: not %clang_cc1 -fsyntax-only %s -std=c++11 2>&1 | FileCheck %s -check-prefix=CHECK-ELIDE-NOTREE 296e7813f08c6adf1d8657b0da86741b54e850fd7Rafael Espindola// RUN: not %clang_cc1 -fsyntax-only %s -fno-elide-type -std=c++11 2>&1 | FileCheck %s -check-prefix=CHECK-NOELIDE-NOTREE 396e7813f08c6adf1d8657b0da86741b54e850fd7Rafael Espindola// RUN: not %clang_cc1 -fsyntax-only %s -fdiagnostics-show-template-tree -std=c++11 2>&1 | FileCheck %s -check-prefix=CHECK-ELIDE-TREE 496e7813f08c6adf1d8657b0da86741b54e850fd7Rafael Espindola// RUN: not %clang_cc1 -fsyntax-only %s -fno-elide-type -fdiagnostics-show-template-tree -std=c++11 2>&1 | FileCheck %s -check-prefix=CHECK-NOELIDE-TREE 5246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu 6246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// PR9548 - "no known conversion from 'vector<string>' to 'vector<string>'" 7246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// vector<string> refers to two different types here. Make sure the message 8246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// gives a way to tell them apart. 9246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuclass versa_string; 10246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieutypedef versa_string string; 11246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu 12246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieunamespace std {template <typename T> class vector;} 13246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuusing std::vector; 14246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu 15246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuvoid f(vector<string> v); 16246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu 17246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieunamespace std { 18246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu class basic_string; 19246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu typedef basic_string string; 20246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu template <typename T> class vector {}; 21246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu void g() { 22246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu vector<string> v; 23246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu f(v); 24246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu } 25246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu} // end namespace std 26246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-NOTREE: no matching function for call to 'f' 27176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<std::basic_string>' to 'vector<versa_string>' for 1st argument 28246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-NOTREE: no matching function for call to 'f' 29176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<std::basic_string>' to 'vector<versa_string>' for 1st argument 30246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: no matching function for call to 'f' 31648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-ELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 32246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: vector< 33176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-ELIDE-TREE: [std::basic_string != versa_string]> 34246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: no matching function for call to 'f' 35648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 36246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: vector< 37176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-NOELIDE-TREE: [std::basic_string != versa_string]> 38246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu 39246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieutemplate <int... A> 40246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuclass I1{}; 41246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuvoid set1(I1<1,2,3,4,2,3,4,3>) {}; 42246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuvoid test1() { 43246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu set1(I1<1,2,3,4,2,2,4,3,7>()); 44246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu} 45246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-NOTREE: no matching function for call to 'set1' 46246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'I1<[5 * ...], 2, [2 * ...], 7>' to 'I1<[5 * ...], 3, [2 * ...], (no argument)>' for 1st argument 47246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-NOTREE: no matching function for call to 'set1' 48246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'I1<1, 2, 3, 4, 2, 2, 4, 3, 7>' to 'I1<1, 2, 3, 4, 2, 3, 4, 3, (no argument)>' for 1st argument 49246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: no matching function for call to 'set1' 50648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-ELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 51246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: I1< 52246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [5 * ...], 53246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [2 != 3], 54246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [2 * ...], 55246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [7 != (no argument)]> 56246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: no matching function for call to 'set1' 57648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 58246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: I1< 59246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: 1, 60246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: 2, 61246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: 3, 62246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: 4, 63246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: 2, 64246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: [2 != 3], 65246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: 4, 66246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: 3, 67246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: [7 != (no argument)]> 68246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu 69246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieutemplate <class A, class B, class C = void> 70246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuclass I2{}; 71246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuvoid set2(I2<int, int>) {}; 72246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuvoid test2() { 73246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu set2(I2<double, int, int>()); 74246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu} 75246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-NOTREE: no matching function for call to 'set2' 76246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'I2<double, [...], int>' to 'I2<int, [...], (default) void>' for 1st argument 77246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-NOTREE: no matching function for call to 'set2' 78246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'I2<double, int, int>' to 'I2<int, int, (default) void>' for 1st argument 79246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: no matching function for call to 'set2' 80648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-ELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 81246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: I2< 82246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [double != int], 83246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [...], 84246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [int != (default) void]> 85246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: no matching function for call to 'set2' 86648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 87246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: I2< 88246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: [double != int], 89246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: int, 90246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: [int != (default) void]> 91246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu 92246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuint V1, V2, V3; 93246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieutemplate <int* A, int *B> 94246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuclass I3{}; 95246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuvoid set3(I3<&V1, &V2>) {}; 96246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuvoid test3() { 97246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu set3(I3<&V3, &V2>()); 98246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu} 99246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-NOTREE: no matching function for call to 'set3' 100246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'I3<&V3, [...]>' to 'I3<&V1, [...]>' for 1st argument 101246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-NOTREE: no matching function for call to 'set3' 102246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'I3<&V3, &V2>' to 'I3<&V1, &V2>' for 1st argument 103246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: no matching function for call to 'set3' 104648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-ELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 105246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: I3< 106246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [&V3 != &V1] 107246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [...]> 108246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: no matching function for call to 'set3' 109648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 110246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: I3< 111246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: [&V3 != &V1] 112246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: &V2> 113246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu 114246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieutemplate <class A, class B> 115246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuclass Alpha{}; 116246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieutemplate <class A, class B> 117246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuclass Beta{}; 118246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieutemplate <class A, class B> 119246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuclass Gamma{}; 120246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieutemplate <class A, class B> 121246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuclass Delta{}; 122246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu 123246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuvoid set4(Alpha<int, int>); 124246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuvoid test4() { 125246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu set4(Beta<void, void>()); 126246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu} 127246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-NOTREE: no matching function for call to 'set4' 128246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'Beta<void, void>' to 'Alpha<int, int>' for 1st argument 129246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-NOTREE: no matching function for call to 'set4' 130246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'Beta<void, void>' to 'Alpha<int, int>' for 1st argument 131246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: no matching function for call to 'set4' 132246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: candidate function not viable: no known conversion from 'Beta<void, void>' to 'Alpha<int, int>' for 1st argument 133246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: no matching function for call to 'set4' 134246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from 'Beta<void, void>' to 'Alpha<int, int>' for 1st argument 135246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu 136246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuvoid set5(Alpha<Beta<Gamma<Delta<int, int>, int>, int>, int>); 137246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuvoid test5() { 138246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu set5(Alpha<Beta<Gamma<void, void>, double>, double>()); 139246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu} 140246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-NOTREE: no matching function for call to 'set5' 141246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'Alpha<Beta<Gamma<void, void>, double>, double>' to 'Alpha<Beta<Gamma<Delta<int, int>, int>, int>, int>' for 1st argument 142246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-NOTREE: no matching function for call to 'set5' 143246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'Alpha<Beta<Gamma<void, void>, double>, double>' to 'Alpha<Beta<Gamma<Delta<int, int>, int>, int>, int>' for 1st argument 144246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: no matching function for call to 'set5' 145648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-ELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 146246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: Alpha< 147246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: Beta< 148246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: Gamma< 149246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [void != Delta<int, int>], 150246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [void != int]> 151246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [double != int]> 152246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [double != int]> 153246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: no matching function for call to 'set5' 154648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 155246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: Alpha< 156246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: Beta< 157246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: Gamma< 158246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: [void != Delta<int, int>], 159246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: [void != int]> 160246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: [double != int]> 161246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: [double != int]> 162246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu 163246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuvoid test6() { 164246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu set5(Alpha<Beta<Delta<int, int>, int>, int>()); 165246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu} 166246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-NOTREE: no matching function for call to 'set5' 167246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'Alpha<Beta<Delta<int, int>, [...]>, [...]>' to 'Alpha<Beta<Gamma<Delta<int, int>, int>, [...]>, [...]>' for 1st argument 168246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-NOTREE: no matching function for call to 'set5' 169246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'Alpha<Beta<Delta<int, int>, int>, int>' to 'Alpha<Beta<Gamma<Delta<int, int>, int>, int>, int>' for 1st argument 170246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: no matching function for call to 'set5' 171648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-ELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 172246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: Alpha< 173246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: Beta< 174246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [Delta<int, int> != Gamma<Delta<int, int>, int>], 175246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [...]> 176246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [...]> 177246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: no matching function for call to 'set5' 178648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 179246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: Alpha< 180246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: Beta< 181246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: [Delta<int, int> != Gamma<Delta<int, int>, int>], 182246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: int> 183246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: int> 184246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu 185246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuint a7, b7; 186246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuint c7[] = {1,2,3}; 187246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieutemplate<int *A> 188246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuclass class7 {}; 189246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuvoid set7(class7<&a7> A) {} 190246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuvoid test7() { 191246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu set7(class7<&a7>()); 192246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu set7(class7<&b7>()); 193246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu set7(class7<c7>()); 194246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu set7(class7<nullptr>()); 195246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu} 196246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-NOTREE: no matching function for call to 'set7' 197712692e130af20b1759b1cf1aae83e22d585233fMatt Beaumont-Gay// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'class7<&b7>' to 'class7<&a7>' for 1st argument 198246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-NOTREE: no matching function for call to 'set7' 199712692e130af20b1759b1cf1aae83e22d585233fMatt Beaumont-Gay// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'class7<c7>' to 'class7<&a7>' for 1st argument 200246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-NOTREE: no matching function for call to 'set7' 201712692e130af20b1759b1cf1aae83e22d585233fMatt Beaumont-Gay// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'class7<nullptr>' to 'class7<&a7>' for 1st argument 202246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-NOTREE: no matching function for call to 'set7' 203712692e130af20b1759b1cf1aae83e22d585233fMatt Beaumont-Gay// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'class7<&b7>' to 'class7<&a7>' for 1st argument 204246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-NOTREE: no matching function for call to 'set7' 205712692e130af20b1759b1cf1aae83e22d585233fMatt Beaumont-Gay// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'class7<c7>' to 'class7<&a7>' for 1st argument 206246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-NOTREE: no matching function for call to 'set7' 207712692e130af20b1759b1cf1aae83e22d585233fMatt Beaumont-Gay// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'class7<nullptr>' to 'class7<&a7>' for 1st argument 208246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: no matching function for call to 'set7' 209648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-ELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 210246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: class7< 211246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [&b7 != &a7]> 212246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: no matching function for call to 'set7' 213648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-ELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 214246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: class7< 215246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [c7 != &a7]> 216246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: no matching function for call to 'set7' 217648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-ELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 218246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: class7< 219246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [nullptr != &a7]> 220246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: no matching function for call to 'set7' 221648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 222246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: class7< 223246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: [&b7 != &a7]> 224246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: no matching function for call to 'set7' 225648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 226246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: class7< 227246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: [c7 != &a7]> 228246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: no matching function for call to 'set7' 229648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 230246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: class7< 231246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: [nullptr != &a7]> 232246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu 233246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieutemplate<typename ...T> struct S8 {}; 234246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieutemplate<typename T> using U8 = S8<int, char, T>; 235246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuint f8(S8<int, char, double>); 236246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuint k8 = f8(U8<char>()); 237246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-NOTREE: no matching function for call to 'f8' 238712692e130af20b1759b1cf1aae83e22d585233fMatt Beaumont-Gay// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'S8<[2 * ...], char>' to 'S8<[2 * ...], double>' for 1st argument 239246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-NOTREE: no matching function for call to 'f8' 240712692e130af20b1759b1cf1aae83e22d585233fMatt Beaumont-Gay// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'S8<int, char, char>' to 'S8<int, char, double>' for 1st argument 241246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: no matching function for call to 'f8' 242648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-ELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 243246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: S8< 244246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [2 * ...], 245246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [char != double]> 246246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: no matching function for call to 'f8' 247648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 248246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: S8< 249246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: int, 250246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: char, 251246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: [char != double]> 252246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu 253246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieutemplate<typename ...T> struct S9 {}; 254246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieutemplate<typename T> using U9 = S9<int, char, T>; 255246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieutemplate<typename T> using V9 = U9<U9<T>>; 256246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuint f9(S9<int, char, U9<const double>>); 257246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuint k9 = f9(V9<double>()); 258246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu 259246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-NOTREE: no matching function for call to 'f9' 260712692e130af20b1759b1cf1aae83e22d585233fMatt Beaumont-Gay// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'S9<[2 * ...], S9<[2 * ...], double>>' to 'S9<[2 * ...], S9<[2 * ...], const double>>' for 1st argument 261246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-NOTREE: no matching function for call to 'f9' 262712692e130af20b1759b1cf1aae83e22d585233fMatt Beaumont-Gay// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'S9<int, char, S9<int, char, double>>' to 'S9<int, char, S9<int, char, const double>>' for 1st argument 263246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: no matching function for call to 'f9' 264648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-ELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 265246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: S9< 266246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [2 * ...], 267246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: S9< 268246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [2 * ...], 269246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [double != const double]>> 270246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: no matching function for call to 'f9' 271648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 272246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: S9< 273246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: int, 274246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: char, 275246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: S9< 276246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: int, 277246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: char, 278246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: [double != const double]>> 279246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu 280246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieutemplate<typename ...A> class class_types {}; 281246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuvoid set10(class_types<int, int>) {} 282246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuvoid test10() { 283246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu set10(class_types<int>()); 284246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu set10(class_types<int, int, int>()); 285246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu} 286246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu 287246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-NOTREE: no matching function for call to 'set10' 288712692e130af20b1759b1cf1aae83e22d585233fMatt Beaumont-Gay// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'class_types<[...], (no argument)>' to 'class_types<[...], int>' for 1st argument 289246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-NOTREE: no matching function for call to 'set10' 290712692e130af20b1759b1cf1aae83e22d585233fMatt Beaumont-Gay// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'class_types<[2 * ...], int>' to 'class_types<[2 * ...], (no argument)>' for 1st argument 291246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-NOTREE: no matching function for call to 'set10' 292712692e130af20b1759b1cf1aae83e22d585233fMatt Beaumont-Gay// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'class_types<int, (no argument)>' to 'class_types<int, int>' for 1st argument 293246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-NOTREE: no matching function for call to 'set10' 294712692e130af20b1759b1cf1aae83e22d585233fMatt Beaumont-Gay// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'class_types<int, int, int>' to 'class_types<int, int, (no argument)>' for 1st argument 295246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: no matching function for call to 'set10' 296648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-ELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 297246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: class_types< 298246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [...], 299246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [(no argument) != int]> 300246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: no matching function for call to 'set10' 301648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-ELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 302246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: class_types< 303246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [2 * ...], 304246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [int != (no argument)]> 305246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: no matching function for call to 'set10' 306648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 307246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: class_types< 308246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: int, 309246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: [(no argument) != int]> 310246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: no matching function for call to 'set10' 311648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 312246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: class_types< 313246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: int, 314246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: int, 315246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: [int != (no argument)]> 316246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu 317246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieutemplate<int ...A> class class_ints {}; 318246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuvoid set11(class_ints<2, 3>) {} 319246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuvoid test11() { 320246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu set11(class_ints<1>()); 321246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu set11(class_ints<0, 3, 6>()); 322246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu} 323246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-NOTREE: no matching function for call to 'set11' 324712692e130af20b1759b1cf1aae83e22d585233fMatt Beaumont-Gay// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'class_ints<1, (no argument)>' to 'class_ints<2, 3>' for 1st argument 325246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-NOTREE: no matching function for call to 'set11' 326712692e130af20b1759b1cf1aae83e22d585233fMatt Beaumont-Gay// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'class_ints<0, [...], 6>' to 'class_ints<2, [...], (no argument)>' for 1st argument 327246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-NOTREE: no matching function for call to 'set11' 328712692e130af20b1759b1cf1aae83e22d585233fMatt Beaumont-Gay// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'class_ints<1, (no argument)>' to 'class_ints<2, 3>' for 1st argument 329246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-NOTREE: no matching function for call to 'set11' 330712692e130af20b1759b1cf1aae83e22d585233fMatt Beaumont-Gay// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'class_ints<0, 3, 6>' to 'class_ints<2, 3, (no argument)>' for 1st argument 331246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: no matching function for call to 'set11' 332648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-ELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 333246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: class_ints< 334246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [1 != 2], 335246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [(no argument) != 3]> 336246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: no matching function for call to 'set11' 337648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-ELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 338246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: class_ints< 339246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [0 != 2], 340246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [...], 341246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [6 != (no argument)]> 342246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: no matching function for call to 'set11' 343648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 344246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: class_ints< 345246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: [1 != 2], 346246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: [(no argument) != 3]> 347246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: no matching function for call to 'set11' 348648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 349246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: class_ints< 350246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: [0 != 2], 351246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: 3, 352246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: [6 != (no argument)]> 353246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu 354246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieutemplate<template<class> class ...A> class class_template_templates {}; 355246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieutemplate<class> class tt1 {}; 356246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieutemplate<class> class tt2 {}; 357246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuvoid set12(class_template_templates<tt1, tt1>) {} 358246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuvoid test12() { 359246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu set12(class_template_templates<tt2>()); 360246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu set12(class_template_templates<tt1, tt1, tt1>()); 361246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu} 362246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-NOTREE: no matching function for call to 'set12' 363712692e130af20b1759b1cf1aae83e22d585233fMatt Beaumont-Gay// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'class_template_templates<template tt2, template (no argument)>' to 'class_template_templates<template tt1, template tt1>' for 1st argument 364246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-NOTREE: no matching function for call to 'set12' 365712692e130af20b1759b1cf1aae83e22d585233fMatt Beaumont-Gay// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'class_template_templates<[2 * ...], template tt1>' to 'class_template_templates<[2 * ...], template (no argument)>' for 1st argument 366246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-NOTREE: no matching function for call to 'set12' 367712692e130af20b1759b1cf1aae83e22d585233fMatt Beaumont-Gay// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'class_template_templates<template tt2, template (no argument)>' to 'class_template_templates<template tt1, template tt1>' for 1st argument 368246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-NOTREE: no matching function for call to 'set12' 369712692e130af20b1759b1cf1aae83e22d585233fMatt Beaumont-Gay// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'class_template_templates<template tt1, template tt1, template tt1>' to 'class_template_templates<template tt1, template tt1, template (no argument)>' for 1st argument 370246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: no matching function for call to 'set12' 371648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-ELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 372246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: class_template_templates< 373246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [template tt2 != template tt1], 374246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [template (no argument) != template tt1]> 375246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: no matching function for call to 'set12' 376648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-ELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 377246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: class_template_templates< 378246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [2 * ...], 379246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [template tt1 != template (no argument)]> 380246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: no matching function for call to 'set12' 381648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 382246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: class_template_templates< 383246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: [template tt2 != template tt1], 384246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: [template (no argument) != template tt1]> 385246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: no matching function for call to 'set12' 386648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 387246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: class_template_templates< 388246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: template tt1, 389246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: template tt1, 390246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: [template tt1 != template (no argument)]> 391246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu 392246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieudouble a13, b13, c13, d13; 393246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieutemplate<double* ...A> class class_ptrs {}; 394246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuvoid set13(class_ptrs<&a13, &b13>) {} 395246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieuvoid test13() { 396246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu set13(class_ptrs<&c13>()); 397246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu set13(class_ptrss<&a13, &b13, &d13>()); 398246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu} 399246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-NOTREE: no matching function for call to 'set13' 400712692e130af20b1759b1cf1aae83e22d585233fMatt Beaumont-Gay// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'class_ptrs<&c13, (no argument)>' to 'class_ptrs<&a13, &b13>' for 1st argument 401246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-NOTREE: no matching function for call to 'set13' 402712692e130af20b1759b1cf1aae83e22d585233fMatt Beaumont-Gay// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'class_ptrs<[2 * ...], &d13>' to 'class_ptrs<[2 * ...], (no argument)>' for 1st argument 403246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-NOTREE: no matching function for call to 'set13' 404712692e130af20b1759b1cf1aae83e22d585233fMatt Beaumont-Gay// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'class_ptrs<&c13, (no argument)>' to 'class_ptrs<&a13, &b13>' for 1st argument 405246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-NOTREE: no matching function for call to 'set13' 406712692e130af20b1759b1cf1aae83e22d585233fMatt Beaumont-Gay// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'class_ptrs<&a13, &b13, &d13>' to 'class_ptrs<&a13, &b13, (no argument)>' for 1st argument 407246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: no matching function for call to 'set13' 408648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-ELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 409246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: class_ptrs< 410246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [&c13 != &a13], 411246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [(no argument) != &b13]> 412246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: no matching function for call to 'set13' 413648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-ELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 414246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: class_ptrs< 415246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [2 * ...], 416246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: [&d13 != (no argument)]> 417246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: no matching function for call to 'set13' 418648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 419246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: class_ptrs< 420246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: [&c13 != &a13], 421246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: [(no argument) != &b13]> 422246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: no matching function for call to 'set13' 423648e7630008aac5caa591bcc6d0f77b9594b85fdRichard Trieu// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 424246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: class_ptrs< 425246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: &a13, 426246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: &b13, 427246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: [&d13 != (no argument)]> 428246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu 429073819806ba2441e2a3e550107f1e756a6ee3ad0Richard Smithtemplate<typename T> struct s14 {}; 430073819806ba2441e2a3e550107f1e756a6ee3ad0Richard Smithtemplate<typename T> using a14 = s14<T>; 431073819806ba2441e2a3e550107f1e756a6ee3ad0Richard Smithtypedef a14<int> b14; 432073819806ba2441e2a3e550107f1e756a6ee3ad0Richard Smithtemplate<typename T> using c14 = b14; 433073819806ba2441e2a3e550107f1e756a6ee3ad0Richard Smithint f14(c14<int>); 434073819806ba2441e2a3e550107f1e756a6ee3ad0Richard Smithint k14 = f14(a14<char>()); 435073819806ba2441e2a3e550107f1e756a6ee3ad0Richard Smith// CHECK-ELIDE-NOTREE: no matching function for call to 'f14' 436073819806ba2441e2a3e550107f1e756a6ee3ad0Richard Smith// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'a14<char>' to 'a14<int>' for 1st argument 437073819806ba2441e2a3e550107f1e756a6ee3ad0Richard Smith// CHECK-NOELIDE-NOTREE: no matching function for call to 'f14' 438073819806ba2441e2a3e550107f1e756a6ee3ad0Richard Smith// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'a14<char>' to 'a14<int>' for 1st argument 439073819806ba2441e2a3e550107f1e756a6ee3ad0Richard Smith// CHECK-ELIDE-TREE: no matching function for call to 'f14' 440073819806ba2441e2a3e550107f1e756a6ee3ad0Richard Smith// CHECK-ELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 441073819806ba2441e2a3e550107f1e756a6ee3ad0Richard Smith// CHECK-ELIDE-TREE: a14< 442073819806ba2441e2a3e550107f1e756a6ee3ad0Richard Smith// CHECK-ELIDE-TREE: [char != int]> 443073819806ba2441e2a3e550107f1e756a6ee3ad0Richard Smith// CHECK-NOELIDE-TREE: no matching function for call to 'f14' 444073819806ba2441e2a3e550107f1e756a6ee3ad0Richard Smith// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 445073819806ba2441e2a3e550107f1e756a6ee3ad0Richard Smith// CHECK-NOELIDE-TREE: a14< 446073819806ba2441e2a3e550107f1e756a6ee3ad0Richard Smith// CHECK-NOELIDE-TREE: [char != int]> 447246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu 4483c88301b551add30e9a4b59af325534643dc4b21Richard Trieuvoid set15(vector<vector<int>>) {} 4493c88301b551add30e9a4b59af325534643dc4b21Richard Trieuvoid test15() { 4503c88301b551add30e9a4b59af325534643dc4b21Richard Trieu set15(vector<vector<int>>()); 4513c88301b551add30e9a4b59af325534643dc4b21Richard Trieu} 4523c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-NOTREE-NOT: set15 4533c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-NOTREE-NOT: set15 4543c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE-NOT: set15 4553c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE-NOT: set15 4563c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// no error here 4573c88301b551add30e9a4b59af325534643dc4b21Richard Trieu 4583c88301b551add30e9a4b59af325534643dc4b21Richard Trieuvoid set16(vector<const vector<int>>) {} 4593c88301b551add30e9a4b59af325534643dc4b21Richard Trieuvoid test16() { 4603c88301b551add30e9a4b59af325534643dc4b21Richard Trieu set16(vector<const vector<const int>>()); 4613c88301b551add30e9a4b59af325534643dc4b21Richard Trieu} 4623c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-NOTREE: no matching function for call to 'set16' 4633c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<const vector<const int>>' to 'vector<const vector<int>>' for 1st argument 4643c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-NOTREE: no matching function for call to 'set16' 4653c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<const vector<const int>>' to 'vector<const vector<int>>' for 1st argument 4663c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: no matching function for call to 'set16' 4673c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 4683c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: vector< 4693c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: const vector< 4703c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: [const != (no qualifiers)] int>> 4713c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: no matching function for call to 'set16' 4723c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 4733c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: vector< 4743c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: const vector< 4753c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: [const != (no qualifiers)] int>> 4763c88301b551add30e9a4b59af325534643dc4b21Richard Trieu 4773c88301b551add30e9a4b59af325534643dc4b21Richard Trieuvoid set17(vector<vector<int>>) {} 4783c88301b551add30e9a4b59af325534643dc4b21Richard Trieuvoid test17() { 4793c88301b551add30e9a4b59af325534643dc4b21Richard Trieu set17(vector<const vector<int>>()); 4803c88301b551add30e9a4b59af325534643dc4b21Richard Trieu} 4813c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-NOTREE: no matching function for call to 'set17' 4823c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<const vector<[...]>>' to 'vector<vector<[...]>>' for 1st argument 4833c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-NOTREE: no matching function for call to 'set17' 4843c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<const vector<int>>' to 'vector<vector<int>>' for 1st argument 4853c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: no matching function for call to 'set17' 4863c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 4873c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: vector< 4883c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: [const != (no qualifiers)] vector< 4893c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: [...]>> 4903c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: no matching function for call to 'set17' 4913c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 4923c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: vector< 4933c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: [const != (no qualifiers)] vector< 4943c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: int>> 4953c88301b551add30e9a4b59af325534643dc4b21Richard Trieu 4963c88301b551add30e9a4b59af325534643dc4b21Richard Trieuvoid set18(vector<const vector<int>>) {} 4973c88301b551add30e9a4b59af325534643dc4b21Richard Trieuvoid test18() { 4983c88301b551add30e9a4b59af325534643dc4b21Richard Trieu set18(vector<vector<int>>()); 4993c88301b551add30e9a4b59af325534643dc4b21Richard Trieu} 5003c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-NOTREE: no matching function for call to 'set18' 5013c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<vector<[...]>>' to 'vector<const vector<[...]>>' for 1st argument 5023c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-NOTREE: no matching function for call to 'set18' 5033c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<vector<int>>' to 'vector<const vector<int>>' for 1st argument 5043c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: no matching function for call to 'set18' 5053c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 5063c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: vector< 5073c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: [(no qualifiers) != const] vector< 5083c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: [...]>> 5093c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: no matching function for call to 'set18' 5103c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 5113c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: vector< 5123c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: [(no qualifiers) != const] vector< 5133c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: int>> 5143c88301b551add30e9a4b59af325534643dc4b21Richard Trieu 5153c88301b551add30e9a4b59af325534643dc4b21Richard Trieuvoid set19(vector<volatile vector<int>>) {} 5163c88301b551add30e9a4b59af325534643dc4b21Richard Trieuvoid test19() { 5173c88301b551add30e9a4b59af325534643dc4b21Richard Trieu set19(vector<const vector<int>>()); 5183c88301b551add30e9a4b59af325534643dc4b21Richard Trieu} 5193c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-NOTREE: no matching function for call to 'set19' 5203c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<const vector<[...]>>' to 'vector<volatile vector<[...]>>' for 1st argument 5213c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-NOTREE: no matching function for call to 'set19' 5223c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<const vector<int>>' to 'vector<volatile vector<int>>' for 1st argument 5233c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: no matching function for call to 'set19' 5243c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 5253c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: vector< 5263c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: [const != volatile] vector< 5273c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: [...]>> 5283c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: no matching function for call to 'set19' 5293c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 5303c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: vector< 5313c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: [const != volatile] vector< 5323c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: int>> 5333c88301b551add30e9a4b59af325534643dc4b21Richard Trieu 5343c88301b551add30e9a4b59af325534643dc4b21Richard Trieuvoid set20(vector<const volatile vector<int>>) {} 5353c88301b551add30e9a4b59af325534643dc4b21Richard Trieuvoid test20() { 5363c88301b551add30e9a4b59af325534643dc4b21Richard Trieu set20(vector<const vector<int>>()); 5373c88301b551add30e9a4b59af325534643dc4b21Richard Trieu} 5383c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-NOTREE: no matching function for call to 'set20' 5393c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<const vector<[...]>>' to 'vector<const volatile vector<[...]>>' for 1st argument 5403c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-NOTREE: no matching function for call to 'set20' 5413c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<const vector<int>>' to 'vector<const volatile vector<int>>' for 1st argument 5423c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: no matching function for call to 'set20' 5433c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 5443c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: vector< 5453c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: [const != const volatile] vector< 5463c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: [...]>> 5473c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: no matching function for call to 'set20' 5483c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 5493c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: vector< 5503c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: [const != const volatile] vector< 5513c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: int>> 5523c88301b551add30e9a4b59af325534643dc4b21Richard Trieu 5533c88301b551add30e9a4b59af325534643dc4b21Richard Trieu 5543c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// Checks that volatile does not show up in diagnostics. 5553c88301b551add30e9a4b59af325534643dc4b21Richard Trieutemplate<typename T> struct S21 {}; 5563c88301b551add30e9a4b59af325534643dc4b21Richard Trieutemplate<typename T> using U21 = volatile S21<T>; 5573c88301b551add30e9a4b59af325534643dc4b21Richard Trieuint f21(vector<const U21<int>>); 5583c88301b551add30e9a4b59af325534643dc4b21Richard Trieuint k21 = f21(vector<U21<int>>()); 5593c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-NOTREE: no matching function for call to 'f21' 5603c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<U21<[...]>>' to 'vector<const U21<[...]>>' for 1st argument 5613c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-NOTREE: no matching function for call to 'f21' 5623c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<U21<int>>' to 'vector<const U21<int>>' for 1st argument 5633c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: no matching function for call to 'f21' 5643c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 5653c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: vector< 5663c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: [(no qualifiers) != const] U21< 5673c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: [...]>> 5683c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: no matching function for call to 'f21' 5693c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 5703c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: vector< 5713c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: [(no qualifiers) != const] U21< 5723c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: int>> 5733c88301b551add30e9a4b59af325534643dc4b21Richard Trieu 5743c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// Checks that volatile does not show up in diagnostics. 5753c88301b551add30e9a4b59af325534643dc4b21Richard Trieutemplate<typename T> struct S22 {}; 5763c88301b551add30e9a4b59af325534643dc4b21Richard Trieutemplate<typename T> using U22 = volatile S22<T>; 5773c88301b551add30e9a4b59af325534643dc4b21Richard Trieuint f22(vector<volatile const U22<int>>); 5783c88301b551add30e9a4b59af325534643dc4b21Richard Trieuint k22 = f22(vector<volatile U22<int>>()); 5793c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-NOTREE: no matching function for call to 'f22' 5803c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<U22<[...]>>' to 'vector<const U22<[...]>>' for 1st argument 5813c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-NOTREE: no matching function for call to 'f22' 5823c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<U22<int>>' to 'vector<const U22<int>>' for 1st argument 5833c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: no matching function for call to 'f22' 5843c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 5853c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: vector< 5863c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: [(no qualifiers) != const] U22< 5873c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: [...]>> 5883c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: no matching function for call to 'f22' 5893c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 5903c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: vector< 5913c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: [(no qualifiers) != const] U22< 5923c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: int>> 5933c88301b551add30e9a4b59af325534643dc4b21Richard Trieu 5943c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// Testing qualifiers and typedefs. 5953c88301b551add30e9a4b59af325534643dc4b21Richard Trieutemplate <class T> struct D23{}; 5963c88301b551add30e9a4b59af325534643dc4b21Richard Trieutemplate <class T> using C23 = D23<T>; 5973c88301b551add30e9a4b59af325534643dc4b21Richard Trieutypedef const C23<int> B23; 5983c88301b551add30e9a4b59af325534643dc4b21Richard Trieutemplate<class ...T> using A23 = B23; 5993c88301b551add30e9a4b59af325534643dc4b21Richard Trieu 6003c88301b551add30e9a4b59af325534643dc4b21Richard Trieuvoid foo23(D23<A23<>> b) {} 6013c88301b551add30e9a4b59af325534643dc4b21Richard Trieuvoid test23() { 6023c88301b551add30e9a4b59af325534643dc4b21Richard Trieu foo23(D23<D23<char>>()); 6033c88301b551add30e9a4b59af325534643dc4b21Richard Trieu foo23(C23<char>()); 6043c88301b551add30e9a4b59af325534643dc4b21Richard Trieu} 6053c88301b551add30e9a4b59af325534643dc4b21Richard Trieu 6063c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-NOTREE: no matching function for call to 'foo23' 6073c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'D23<D23<char>>' to 'D23<const D23<int>>' for 1st argument 6083c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-NOTREE: no matching function for call to 'foo23' 6093c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'D23<char>' to 'D23<A23<>>' for 1st argument 6103c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-NOTREE: no matching function for call to 'foo23' 6113c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'D23<D23<char>>' to 'D23<const D23<int>>' for 1st argument 6123c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-NOTREE: no matching function for call to 'foo23' 6133c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'D23<char>' to 'D23<A23<>>' for 1st argument 6143c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: no matching function for call to 'foo23' 6153c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 6163c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: D23< 6173c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: [(no qualifiers) != const] D23< 6183c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: [char != int]>> 6193c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: no matching function for call to 'foo23' 6203c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 6213c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: D23< 6223c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-ELIDE-TREE: [char != A23<>]> 6233c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: no matching function for call to 'foo23' 6243c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 6253c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: D23< 6263c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: [(no qualifiers) != const] D23< 6273c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: [char != int]>> 6283c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: no matching function for call to 'foo23' 6293c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument 6303c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: D23< 6313c88301b551add30e9a4b59af325534643dc4b21Richard Trieu// CHECK-NOELIDE-TREE: [char != A23<>]> 6323c88301b551add30e9a4b59af325534643dc4b21Richard Trieu 63354c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieunamespace PR14015 { 63454c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieutemplate <unsigned N> class Foo1 {}; 63554c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieutemplate <unsigned N = 2> class Foo2 {}; 63654c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieutemplate <unsigned ...N> class Foo3 {}; 63754c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu 63854c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieuvoid Play1() { 63954c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu Foo1<1> F1; 64054c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu Foo1<2> F2, F3; 64154c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu F2 = F1; 64254c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu F1 = F2; 64354c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu F2 = F3; 64454c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu F3 = F2; 64554c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu} 64654c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu 64754c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-NOTREE: no viable overloaded '=' 648060fe33d41ea975db519c96def5c2d2b1da7a78fRichard Trieu// CHECK-ELIDE-NOTREE: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'Foo1<1>' to 'const Foo1<2>' for 1st argument 64954c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-NOTREE: candidate function (the implicit move assignment operator) not viable: no known conversion from 'Foo1<1>' to 'Foo1<2>' for 1st argument 65054c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-NOTREE: no viable overloaded '=' 651060fe33d41ea975db519c96def5c2d2b1da7a78fRichard Trieu// CHECK-ELIDE-NOTREE: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'Foo1<2>' to 'const Foo1<1>' for 1st argument 65254c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-NOTREE: candidate function (the implicit move assignment operator) not viable: no known conversion from 'Foo1<2>' to 'Foo1<1>' for 1st argument 65354c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-NOTREE: no viable overloaded '=' 654060fe33d41ea975db519c96def5c2d2b1da7a78fRichard Trieu// CHECK-NOELIDE-NOTREE: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'Foo1<1>' to 'const Foo1<2>' for 1st argument 65554c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-NOTREE: candidate function (the implicit move assignment operator) not viable: no known conversion from 'Foo1<1>' to 'Foo1<2>' for 1st argument 65654c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-NOTREE: no viable overloaded '=' 657060fe33d41ea975db519c96def5c2d2b1da7a78fRichard Trieu// CHECK-NOELIDE-NOTREE: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'Foo1<2>' to 'const Foo1<1>' for 1st argument 65854c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-NOTREE: candidate function (the implicit move assignment operator) not viable: no known conversion from 'Foo1<2>' to 'Foo1<1>' for 1st argument 65954c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: no viable overloaded '=' 66054c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: candidate function (the implicit copy assignment operator) not viable: no known conversion from argument type to parameter type for 1st argument 661060fe33d41ea975db519c96def5c2d2b1da7a78fRichard Trieu// CHECK-ELIDE-TREE: [(no qualifiers) != const] Foo1< 66254c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: [1 != 2]> 66354c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: candidate function (the implicit move assignment operator) not viable: no known conversion from argument type to parameter type for 1st argument 66454c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: Foo1< 66554c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: [1 != 2]> 66654c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: no viable overloaded '=' 66754c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: candidate function (the implicit copy assignment operator) not viable: no known conversion from argument type to parameter type for 1st argument 668060fe33d41ea975db519c96def5c2d2b1da7a78fRichard Trieu// CHECK-ELIDE-TREE: [(no qualifiers) != const] Foo1< 66954c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: [2 != 1]> 67054c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: candidate function (the implicit move assignment operator) not viable: no known conversion from argument type to parameter type for 1st argument 67154c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: Foo1< 67254c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: [2 != 1]> 67354c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: no viable overloaded '=' 67454c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: candidate function (the implicit copy assignment operator) not viable: no known conversion from argument type to parameter type for 1st argument 675060fe33d41ea975db519c96def5c2d2b1da7a78fRichard Trieu// CHECK-NOELIDE-TREE: [(no qualifiers) != const] Foo1< 67654c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: [1 != 2]> 67754c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: candidate function (the implicit move assignment operator) not viable: no known conversion from argument type to parameter type for 1st argument 67854c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: Foo1< 67954c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: [1 != 2]> 68054c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: no viable overloaded '=' 68154c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: candidate function (the implicit copy assignment operator) not viable: no known conversion from argument type to parameter type for 1st argument 682060fe33d41ea975db519c96def5c2d2b1da7a78fRichard Trieu// CHECK-NOELIDE-TREE: [(no qualifiers) != const] Foo1< 68354c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: [2 != 1]> 68454c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: candidate function (the implicit move assignment operator) not viable: no known conversion from argument type to parameter type for 1st argument 68554c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: Foo1< 68654c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: [2 != 1]> 68754c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu 68854c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieuvoid Play2() { 68954c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu Foo2<1> F1; 69054c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu Foo2<> F2, F3; 69154c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu F2 = F1; 69254c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu F1 = F2; 69354c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu F2 = F3; 69454c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu F3 = F2; 69554c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu} 69654c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-NOTREE: no viable overloaded '=' 697060fe33d41ea975db519c96def5c2d2b1da7a78fRichard Trieu// CHECK-ELIDE-NOTREE: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'Foo2<1>' to 'const Foo2<2>' for 1st argument 69854c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-NOTREE: candidate function (the implicit move assignment operator) not viable: no known conversion from 'Foo2<1>' to 'Foo2<2>' for 1st argument 69954c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-NOTREE: no viable overloaded '=' 700060fe33d41ea975db519c96def5c2d2b1da7a78fRichard Trieu// CHECK-ELIDE-NOTREE: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'Foo2<(default) 2>' to 'const Foo2<1>' for 1st argument 70154c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-NOTREE: candidate function (the implicit move assignment operator) not viable: no known conversion from 'Foo2<(default) 2>' to 'Foo2<1>' for 1st argument 70254c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-NOTREE: no viable overloaded '=' 703060fe33d41ea975db519c96def5c2d2b1da7a78fRichard Trieu// CHECK-NOELIDE-NOTREE: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'Foo2<1>' to 'const Foo2<2>' for 1st argument 70454c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-NOTREE: candidate function (the implicit move assignment operator) not viable: no known conversion from 'Foo2<1>' to 'Foo2<2>' for 1st argument 70554c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-NOTREE: no viable overloaded '=' 706060fe33d41ea975db519c96def5c2d2b1da7a78fRichard Trieu// CHECK-NOELIDE-NOTREE: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'Foo2<(default) 2>' to 'const Foo2<1>' for 1st argument 70754c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-NOTREE: candidate function (the implicit move assignment operator) not viable: no known conversion from 'Foo2<(default) 2>' to 'Foo2<1>' for 1st argument 70854c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: no viable overloaded '=' 70954c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: candidate function (the implicit copy assignment operator) not viable: no known conversion from argument type to parameter type for 1st argument 710060fe33d41ea975db519c96def5c2d2b1da7a78fRichard Trieu// CHECK-ELIDE-TREE: [(no qualifiers) != const] Foo2< 71154c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: [1 != 2]> 71254c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: candidate function (the implicit move assignment operator) not viable: no known conversion from argument type to parameter type for 1st argument 71354c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: Foo2< 71454c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: [1 != 2]> 71554c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: no viable overloaded '=' 71654c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: candidate function (the implicit copy assignment operator) not viable: no known conversion from argument type to parameter type for 1st argument 717060fe33d41ea975db519c96def5c2d2b1da7a78fRichard Trieu// CHECK-ELIDE-TREE: [(no qualifiers) != const] Foo2< 71854c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: [(default) 2 != 1]> 71954c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: candidate function (the implicit move assignment operator) not viable: no known conversion from argument type to parameter type for 1st argument 72054c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: Foo2< 72154c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: [(default) 2 != 1]> 72254c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: no viable overloaded '=' 72354c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: candidate function (the implicit copy assignment operator) not viable: no known conversion from argument type to parameter type for 1st argument 724060fe33d41ea975db519c96def5c2d2b1da7a78fRichard Trieu// CHECK-NOELIDE-TREE: [(no qualifiers) != const] Foo2< 72554c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: [1 != 2]> 72654c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: candidate function (the implicit move assignment operator) not viable: no known conversion from argument type to parameter type for 1st argument 72754c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: Foo2< 72854c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: [1 != 2]> 72954c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: no viable overloaded '=' 73054c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: candidate function (the implicit copy assignment operator) not viable: no known conversion from argument type to parameter type for 1st argument 731060fe33d41ea975db519c96def5c2d2b1da7a78fRichard Trieu// CHECK-NOELIDE-TREE: [(no qualifiers) != const] Foo2< 73254c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: [(default) 2 != 1]> 73354c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: candidate function (the implicit move assignment operator) not viable: no known conversion from argument type to parameter type for 1st argument 73454c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: Foo2< 73554c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: [(default) 2 != 1]> 73654c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu 73754c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieuvoid Play3() { 73854c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu Foo3<1> F1; 73954c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu Foo3<2, 1> F2, F3; 74054c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu F2 = F1; 74154c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu F1 = F2; 74254c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu F2 = F3; 74354c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu F3 = F2; 74454c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu} 74554c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-NOTREE: no viable overloaded '=' 746060fe33d41ea975db519c96def5c2d2b1da7a78fRichard Trieu// CHECK-ELIDE-NOTREE: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'Foo3<1, (no argument)>' to 'const Foo3<2, 1>' for 1st argument 74754c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-NOTREE: candidate function (the implicit move assignment operator) not viable: no known conversion from 'Foo3<1, (no argument)>' to 'Foo3<2, 1>' for 1st argument 74854c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-NOTREE: no viable overloaded '=' 749060fe33d41ea975db519c96def5c2d2b1da7a78fRichard Trieu// CHECK-ELIDE-NOTREE: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'Foo3<2, 1>' to 'const Foo3<1, (no argument)>' for 1st argument 75054c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-NOTREE: candidate function (the implicit move assignment operator) not viable: no known conversion from 'Foo3<2, 1>' to 'Foo3<1, (no argument)>' for 1st argument 75154c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-NOTREE: no viable overloaded '=' 752060fe33d41ea975db519c96def5c2d2b1da7a78fRichard Trieu// CHECK-NOELIDE-NOTREE: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'Foo3<1, (no argument)>' to 'const Foo3<2, 1>' for 1st argument 75354c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-NOTREE: candidate function (the implicit move assignment operator) not viable: no known conversion from 'Foo3<1, (no argument)>' to 'Foo3<2, 1>' for 1st argument 75454c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-NOTREE: no viable overloaded '=' 755060fe33d41ea975db519c96def5c2d2b1da7a78fRichard Trieu// CHECK-NOELIDE-NOTREE: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'Foo3<2, 1>' to 'const Foo3<1, (no argument)>' for 1st argument 75654c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-NOTREE: candidate function (the implicit move assignment operator) not viable: no known conversion from 'Foo3<2, 1>' to 'Foo3<1, (no argument)>' for 1st argument 75754c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: no viable overloaded '=' 75854c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: candidate function (the implicit copy assignment operator) not viable: no known conversion from argument type to parameter type for 1st argument 759060fe33d41ea975db519c96def5c2d2b1da7a78fRichard Trieu// CHECK-ELIDE-TREE: [(no qualifiers) != const] Foo3< 76054c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: [1 != 2], 76154c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: [(no argument) != 1]> 76254c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: candidate function (the implicit move assignment operator) not viable: no known conversion from argument type to parameter type for 1st argument 76354c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: Foo3< 76454c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: [1 != 2], 76554c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: [(no argument) != 1]> 76654c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: no viable overloaded '=' 76754c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: candidate function (the implicit copy assignment operator) not viable: no known conversion from argument type to parameter type for 1st argument 768060fe33d41ea975db519c96def5c2d2b1da7a78fRichard Trieu// CHECK-ELIDE-TREE: [(no qualifiers) != const] Foo3< 76954c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: [2 != 1], 77054c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: [1 != (no argument)]> 77154c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: candidate function (the implicit move assignment operator) not viable: no known conversion from argument type to parameter type for 1st argument 77254c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: Foo3< 77354c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: [2 != 1], 77454c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-ELIDE-TREE: [1 != (no argument)]> 77554c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: no viable overloaded '=' 77654c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: candidate function (the implicit copy assignment operator) not viable: no known conversion from argument type to parameter type for 1st argument 777060fe33d41ea975db519c96def5c2d2b1da7a78fRichard Trieu// CHECK-NOELIDE-TREE: [(no qualifiers) != const] Foo3< 77854c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: [1 != 2], 77954c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: [(no argument) != 1]> 78054c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: candidate function (the implicit move assignment operator) not viable: no known conversion from argument type to parameter type for 1st argument 78154c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: Foo3< 78254c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: [1 != 2], 78354c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: [(no argument) != 1]> 78454c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: no viable overloaded '=' 78554c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: candidate function (the implicit copy assignment operator) not viable: no known conversion from argument type to parameter type for 1st argument 786060fe33d41ea975db519c96def5c2d2b1da7a78fRichard Trieu// CHECK-NOELIDE-TREE: [(no qualifiers) != const] Foo3< 78754c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: [2 != 1], 78854c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: [1 != (no argument)]> 78954c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: candidate function (the implicit move assignment operator) not viable: no known conversion from argument type to parameter type for 1st argument 79054c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: Foo3< 79154c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: [2 != 1], 79254c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu// CHECK-NOELIDE-TREE: [1 != (no argument)]> 79354c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu} 79454c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu 795924d5c9853fbdfabc54a473e680f3b6bb8a1b940Eli Friedmannamespace PR14342 { 796924d5c9853fbdfabc54a473e680f3b6bb8a1b940Eli Friedman template<typename T, short a> struct X {}; 797924d5c9853fbdfabc54a473e680f3b6bb8a1b940Eli Friedman X<int, (signed char)-1> x = X<long, -1>(); 798924d5c9853fbdfabc54a473e680f3b6bb8a1b940Eli Friedman X<int, 3UL> y = X<int, 2>(); 799924d5c9853fbdfabc54a473e680f3b6bb8a1b940Eli Friedman // CHECK-ELIDE-NOTREE: error: no viable conversion from 'X<long, [...]>' to 'X<int, [...]>' 80070e82dc7a254054f0de491493489da162e63c364Richard Trieu // CHECK-ELIDE-NOTREE: error: no viable conversion from 'X<[...], 2>' to 'X<[...], 3>' 801924d5c9853fbdfabc54a473e680f3b6bb8a1b940Eli Friedman} 80254c45453359b47646a1c8d072b02f628b7e16eaaRichard Trieu 8031850ac6ae954524c821723a0f87df62d004a7293Eli Friedmannamespace PR14489 { 8041850ac6ae954524c821723a0f87df62d004a7293Eli Friedman // The important thing here is that the diagnostic diffs a template specialization 8051850ac6ae954524c821723a0f87df62d004a7293Eli Friedman // with no arguments against itself. (We might need a different test if this 8061850ac6ae954524c821723a0f87df62d004a7293Eli Friedman // diagnostic changes). 8071850ac6ae954524c821723a0f87df62d004a7293Eli Friedman template<class ...V> 8081850ac6ae954524c821723a0f87df62d004a7293Eli Friedman struct VariableList { 8091850ac6ae954524c821723a0f87df62d004a7293Eli Friedman void ConnectAllToAll(VariableList<>& params = VariableList<>()) { 8101850ac6ae954524c821723a0f87df62d004a7293Eli Friedman } 8111850ac6ae954524c821723a0f87df62d004a7293Eli Friedman }; 8121850ac6ae954524c821723a0f87df62d004a7293Eli Friedman // CHECK-ELIDE-NOTREE: non-const lvalue reference to type 'VariableList<>' cannot bind to a temporary of type 'VariableList<>' 8131850ac6ae954524c821723a0f87df62d004a7293Eli Friedman} 8141850ac6ae954524c821723a0f87df62d004a7293Eli Friedman 815335153679daf37c13a8c89266056b4be061e34e3Douglas Gregornamespace rdar12456626 { 816335153679daf37c13a8c89266056b4be061e34e3Douglas Gregor struct IntWrapper { 817335153679daf37c13a8c89266056b4be061e34e3Douglas Gregor typedef int type; 818335153679daf37c13a8c89266056b4be061e34e3Douglas Gregor }; 819335153679daf37c13a8c89266056b4be061e34e3Douglas Gregor 820335153679daf37c13a8c89266056b4be061e34e3Douglas Gregor template<typename T, typename T::type V> 821335153679daf37c13a8c89266056b4be061e34e3Douglas Gregor struct X { }; 822335153679daf37c13a8c89266056b4be061e34e3Douglas Gregor 823335153679daf37c13a8c89266056b4be061e34e3Douglas Gregor struct A { 824335153679daf37c13a8c89266056b4be061e34e3Douglas Gregor virtual X<IntWrapper, 1> foo(); 825335153679daf37c13a8c89266056b4be061e34e3Douglas Gregor }; 826335153679daf37c13a8c89266056b4be061e34e3Douglas Gregor 827335153679daf37c13a8c89266056b4be061e34e3Douglas Gregor struct B : A { 828335153679daf37c13a8c89266056b4be061e34e3Douglas Gregor // CHECK-ELIDE-NOTREE: virtual function 'foo' has a different return type 829335153679daf37c13a8c89266056b4be061e34e3Douglas Gregor virtual X<IntWrapper, 2> foo(); 830335153679daf37c13a8c89266056b4be061e34e3Douglas Gregor }; 831335153679daf37c13a8c89266056b4be061e34e3Douglas Gregor} 832335153679daf37c13a8c89266056b4be061e34e3Douglas Gregor 833877761c56d850a6cc5f9246bf248c8a4dc2b0554Richard Trieunamespace PR15023 { 834877761c56d850a6cc5f9246bf248c8a4dc2b0554Richard Trieu // Don't crash when non-QualTypes are passed to a diff modifier. 835877761c56d850a6cc5f9246bf248c8a4dc2b0554Richard Trieu template <typename... Args> 836877761c56d850a6cc5f9246bf248c8a4dc2b0554Richard Trieu void func(void (*func)(Args...), Args...) { } 837877761c56d850a6cc5f9246bf248c8a4dc2b0554Richard Trieu 838877761c56d850a6cc5f9246bf248c8a4dc2b0554Richard Trieu void bar(int, int &) { 839877761c56d850a6cc5f9246bf248c8a4dc2b0554Richard Trieu } 840877761c56d850a6cc5f9246bf248c8a4dc2b0554Richard Trieu 841877761c56d850a6cc5f9246bf248c8a4dc2b0554Richard Trieu void foo(int x) { 842877761c56d850a6cc5f9246bf248c8a4dc2b0554Richard Trieu func(bar, 1, x) 843877761c56d850a6cc5f9246bf248c8a4dc2b0554Richard Trieu } 844877761c56d850a6cc5f9246bf248c8a4dc2b0554Richard Trieu // CHECK-ELIDE-NOTREE: no matching function for call to 'func' 845877761c56d850a6cc5f9246bf248c8a4dc2b0554Richard Trieu // CHECK-ELIDE-NOTREE: candidate template ignored: deduced conflicting types for parameter 'Args' (<int, int &> vs. <int, int>) 846877761c56d850a6cc5f9246bf248c8a4dc2b0554Richard Trieu} 847877761c56d850a6cc5f9246bf248c8a4dc2b0554Richard Trieu 8481166723df8af0f062c3f6d473d8ae7bb2b64e572Douglas Gregornamespace rdar12931988 { 8491166723df8af0f062c3f6d473d8ae7bb2b64e572Douglas Gregor namespace A { 8501166723df8af0f062c3f6d473d8ae7bb2b64e572Douglas Gregor template<typename T> struct X { }; 8511166723df8af0f062c3f6d473d8ae7bb2b64e572Douglas Gregor } 8521166723df8af0f062c3f6d473d8ae7bb2b64e572Douglas Gregor 8531166723df8af0f062c3f6d473d8ae7bb2b64e572Douglas Gregor namespace B { 8541166723df8af0f062c3f6d473d8ae7bb2b64e572Douglas Gregor template<typename T> struct X { }; 8551166723df8af0f062c3f6d473d8ae7bb2b64e572Douglas Gregor } 8561166723df8af0f062c3f6d473d8ae7bb2b64e572Douglas Gregor 8571166723df8af0f062c3f6d473d8ae7bb2b64e572Douglas Gregor void foo(A::X<int> &ax, B::X<int> bx) { 8581166723df8af0f062c3f6d473d8ae7bb2b64e572Douglas Gregor // CHECK-ELIDE-NOTREE: no viable overloaded '=' 8591166723df8af0f062c3f6d473d8ae7bb2b64e572Douglas Gregor // CHECK-ELIDE-NOTREE: no known conversion from 'B::X<int>' to 'const rdar12931988::A::X<int>' 8601166723df8af0f062c3f6d473d8ae7bb2b64e572Douglas Gregor ax = bx; 8611166723df8af0f062c3f6d473d8ae7bb2b64e572Douglas Gregor } 862f499b34d4911dda3b20ede1377ea29b83d3f149eRichard Trieu 863f499b34d4911dda3b20ede1377ea29b83d3f149eRichard Trieu template<template<typename> class> class Y {}; 864f499b34d4911dda3b20ede1377ea29b83d3f149eRichard Trieu 865f499b34d4911dda3b20ede1377ea29b83d3f149eRichard Trieu void bar(Y<A::X> ya, Y<B::X> yb) { 866f499b34d4911dda3b20ede1377ea29b83d3f149eRichard Trieu // CHECK-ELIDE-NOTREE: no viable overloaded '=' 867f499b34d4911dda3b20ede1377ea29b83d3f149eRichard Trieu // CHECK-ELIDE-NOTREE: no known conversion from 'Y<template rdar12931988::B::X>' to 'Y<template rdar12931988::A::X>' 868f499b34d4911dda3b20ede1377ea29b83d3f149eRichard Trieu ya = yb; 869f499b34d4911dda3b20ede1377ea29b83d3f149eRichard Trieu } 8701166723df8af0f062c3f6d473d8ae7bb2b64e572Douglas Gregor} 8711166723df8af0f062c3f6d473d8ae7bb2b64e572Douglas Gregor 872da8910519b8dc79826781e74aaafddbd5c4ba19cRichard Trieunamespace ValueDecl { 873da8910519b8dc79826781e74aaafddbd5c4ba19cRichard Trieu int int1, int2, default_int; 874da8910519b8dc79826781e74aaafddbd5c4ba19cRichard Trieu template <const int& T = default_int> 875da8910519b8dc79826781e74aaafddbd5c4ba19cRichard Trieu struct S {}; 876da8910519b8dc79826781e74aaafddbd5c4ba19cRichard Trieu 877da8910519b8dc79826781e74aaafddbd5c4ba19cRichard Trieu typedef S<int1> T1; 878da8910519b8dc79826781e74aaafddbd5c4ba19cRichard Trieu typedef S<int2> T2; 879da8910519b8dc79826781e74aaafddbd5c4ba19cRichard Trieu typedef S<> TD; 880da8910519b8dc79826781e74aaafddbd5c4ba19cRichard Trieu 881da8910519b8dc79826781e74aaafddbd5c4ba19cRichard Trieu void test() { 882da8910519b8dc79826781e74aaafddbd5c4ba19cRichard Trieu T1 t1; 883da8910519b8dc79826781e74aaafddbd5c4ba19cRichard Trieu T2 t2; 884da8910519b8dc79826781e74aaafddbd5c4ba19cRichard Trieu TD td; 885da8910519b8dc79826781e74aaafddbd5c4ba19cRichard Trieu 886da8910519b8dc79826781e74aaafddbd5c4ba19cRichard Trieu t1 = t2; 887da8910519b8dc79826781e74aaafddbd5c4ba19cRichard Trieu // CHECK-ELIDE-NOTREE: no viable overloaded '=' 888da8910519b8dc79826781e74aaafddbd5c4ba19cRichard Trieu // CHECK-ELIDE-NOTREE: no known conversion from 'S<int2>' to 'S<int1>' 889da8910519b8dc79826781e74aaafddbd5c4ba19cRichard Trieu 890da8910519b8dc79826781e74aaafddbd5c4ba19cRichard Trieu t2 = t1; 891da8910519b8dc79826781e74aaafddbd5c4ba19cRichard Trieu // CHECK-ELIDE-NOTREE: no viable overloaded '=' 892da8910519b8dc79826781e74aaafddbd5c4ba19cRichard Trieu // CHECK-ELIDE-NOTREE: no known conversion from 'S<int1>' to 'S<int2>' 893da8910519b8dc79826781e74aaafddbd5c4ba19cRichard Trieu 894da8910519b8dc79826781e74aaafddbd5c4ba19cRichard Trieu td = t1; 895da8910519b8dc79826781e74aaafddbd5c4ba19cRichard Trieu // TODO: Find out why (default) isn't printed on second template. 896da8910519b8dc79826781e74aaafddbd5c4ba19cRichard Trieu // CHECK-ELIDE-NOTREE: no viable overloaded '=' 897da8910519b8dc79826781e74aaafddbd5c4ba19cRichard Trieu // CHECK-ELIDE-NOTREE: no known conversion from 'S<int1>' to 'S<default_int>' 898da8910519b8dc79826781e74aaafddbd5c4ba19cRichard Trieu 899da8910519b8dc79826781e74aaafddbd5c4ba19cRichard Trieu t2 = td; 900da8910519b8dc79826781e74aaafddbd5c4ba19cRichard Trieu // CHECK-ELIDE-NOTREE: no viable overloaded '=' 901da8910519b8dc79826781e74aaafddbd5c4ba19cRichard Trieu // CHECK-ELIDE-NOTREE: no known conversion from 'S<(default) default_int>' to 'S<int2>' 902da8910519b8dc79826781e74aaafddbd5c4ba19cRichard Trieu 903da8910519b8dc79826781e74aaafddbd5c4ba19cRichard Trieu } 904da8910519b8dc79826781e74aaafddbd5c4ba19cRichard Trieu} 905da8910519b8dc79826781e74aaafddbd5c4ba19cRichard Trieu 906625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieunamespace DependentDefault { 907625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu template <typename> struct Trait { 908625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu enum { V = 40 }; 909625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu typedef int Ty; 910625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu static int I; 911625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu }; 912625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu int other; 913625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu 914625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu template <typename T, int = Trait<T>::V > struct A {}; 915625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu template <typename T, typename = Trait<T>::Ty > struct B {}; 916625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu template <typename T, int& = Trait<T>::I > struct C {}; 917625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu 918625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu void test() { 919625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu 920625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu A<int> a1; 921625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu A<char> a2; 922625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu A<int, 10> a3; 923625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu a1 = a2; 924625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu // CHECK-ELIDE-NOTREE: no viable overloaded '=' 925625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu // CHECK-ELIDE-NOTREE: no known conversion from 'A<char, [...]>' to 'A<int, [...]>' 926625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu a3 = a1; 927625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu // CHECK-ELIDE-NOTREE: no viable overloaded '=' 928625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu // CHECK-ELIDE-NOTREE: no known conversion from 'A<[...], (default) 40>' to 'A<[...], 10>' 929625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu a2 = a3; 930625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu // CHECK-ELIDE-NOTREE: no viable overloaded '=' 931625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu // CHECK-ELIDE-NOTREE: no known conversion from 'A<int, 10>' to 'A<char, 40>' 932625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu 933625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu B<int> b1; 934625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu B<char> b2; 935625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu B<int, char> b3; 936625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu b1 = b2; 937625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu // CHECK-ELIDE-NOTREE: no viable overloaded '=' 93803bf10dc4f245a17ee4f702461cba5120cc4d09bRichard Trieu // CHECK-ELIDE-NOTREE: no known conversion from 'B<char, [...]>' to 'B<int, [...]>' 939625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu b3 = b1; 940625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu // CHECK-ELIDE-NOTREE: no viable overloaded '=' 94103bf10dc4f245a17ee4f702461cba5120cc4d09bRichard Trieu // CHECK-ELIDE-NOTREE: no known conversion from 'B<[...], (default) int>' to 'B<[...], char>' 942625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu b2 = b3; 943625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu // CHECK-ELIDE-NOTREE: no viable overloaded '=' 944625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu // CHECK-ELIDE-NOTREE: no known conversion from 'B<int, char>' to 'B<char, int>' 945625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu 946625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu C<int> c1; 947625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu C<char> c2; 948625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu C<int, other> c3; 949625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu c1 = c2; 950625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu // CHECK-ELIDE-NOTREE: no viable overloaded '=' 951625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu // CHECK-ELIDE-NOTREE: no known conversion from 'C<char, (default) I>' to 'C<int, I>' 952625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu c3 = c1; 953625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu // CHECK-ELIDE-NOTREE: no viable overloaded '=' 954625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu // CHECK-ELIDE-NOTREE: no known conversion from 'C<[...], (default) I>' to 'C<[...], other>' 955625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu c2 = c3; 956625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu // CHECK-ELIDE-NOTREE: no viable overloaded '=' 957625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu // CHECK-ELIDE-NOTREE: no known conversion from 'C<int, other>' to 'C<char, I>' 958625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu } 959625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu} 960625785d370f6c0d8262090b8a2abe3799f72d58dRichard Trieu 961fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieunamespace VariadicDefault { 962fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu int i1, i2, i3; 963fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu template <int = 5, int...> struct A {}; 964fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu template <int& = i1, int& ...> struct B {}; 965fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu template <typename = void, typename...> struct C {}; 966fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu 967fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu void test() { 968fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu A<> a1; 969fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu A<5, 6, 7> a2; 970fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu A<1, 2> a3; 971fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu a2 = a1; 972fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu // CHECK-ELIDE-NOTREE: no viable overloaded '=' 973fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu // CHECK-ELIDE-NOTREE: no known conversion from 'A<[...], (no argument), (no argument)>' to 'A<[...], 6, 7>' 974fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu a3 = a1; 975fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu // CHECK-ELIDE-NOTREE: no viable overloaded '=' 976fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu // CHECK-ELIDE-NOTREE: no known conversion from 'A<(default) 5, (no argument)>' to 'A<1, 2>' 977fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu 978fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu B<> b1; 979fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu B<i1, i2, i3> b2; 980fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu B<i2, i3> b3; 981fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu b2 = b1; 982fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu // CHECK-ELIDE-NOTREE: no viable overloaded '=' 983fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu // CHECK-ELIDE-NOTREE: no known conversion from 'B<[...], (no argument), (no argument)>' to 'B<[...], i2, i3>' 984fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu b3 = b1; 985fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu // CHECK-ELIDE-NOTREE: no viable overloaded '=' 986fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu // CHECK-ELIDE-NOTREE: no known conversion from 'B<(default) i1, (no argument)>' to 'B<i2, i3>' 987fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu 988709caea14f3a31265d6a791d8e3897ca7b65c1cbRichard Trieu B<i1, i2, i3> b4 = b1; 989709caea14f3a31265d6a791d8e3897ca7b65c1cbRichard Trieu // CHECK-ELIDE-NOTREE: no viable conversion from 'B<[...], (no argument), (no argument)>' to 'B<[...], i2, i3>' 990709caea14f3a31265d6a791d8e3897ca7b65c1cbRichard Trieu B<i2, i3> b5 = b1; 991709caea14f3a31265d6a791d8e3897ca7b65c1cbRichard Trieu // CHECK-ELIDE-NOTREE: no viable conversion from 'B<(default) i1, (no argument)>' to 'B<i2, i3>' 992709caea14f3a31265d6a791d8e3897ca7b65c1cbRichard Trieu 993fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu C<> c1; 994fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu C<void, void> c2; 995fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu C<char, char> c3; 996fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu c2 = c1; 997fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu // CHECK-ELIDE-NOTREE: no viable overloaded '=' 998fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu // CHECK-ELIDE-NOTREE: no known conversion from 'C<[...], (no argument)>' to 'C<[...], void>' 999fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu c3 = c1; 1000fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu // CHECK-ELIDE-NOTREE: no viable overloaded '=' 1001fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu // CHECK-ELIDE-NOTREE: no known conversion from 'C<(default) void, (no argument)>' to 'C<char, char>' 1002fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu } 1003fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu} 1004fa3d2758653113cd2b5fff06f8ff22eeb669c044Richard Trieu 100528b34d86baca3282704de364b98a123baf426799Richard Trieunamespace PointerArguments { 100628b34d86baca3282704de364b98a123baf426799Richard Trieu template <int *p> class T {}; 100728b34d86baca3282704de364b98a123baf426799Richard Trieu template <int* ...> class U {}; 100828b34d86baca3282704de364b98a123baf426799Richard Trieu int a, b, c; 100928b34d86baca3282704de364b98a123baf426799Richard Trieu int z[5]; 101028b34d86baca3282704de364b98a123baf426799Richard Trieu void test() { 101128b34d86baca3282704de364b98a123baf426799Richard Trieu T<&a> ta; 101228b34d86baca3282704de364b98a123baf426799Richard Trieu T<z> tz; 101328b34d86baca3282704de364b98a123baf426799Richard Trieu T<&b> tb(ta); 101428b34d86baca3282704de364b98a123baf426799Richard Trieu // CHECK-ELIDE-NOTREE: no matching constructor for initialization of 'T<&b>' 101528b34d86baca3282704de364b98a123baf426799Richard Trieu // CHECK-ELIDE-NOTREE: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'T<&a>' to 'const T<&b>' for 1st argument 101628b34d86baca3282704de364b98a123baf426799Richard Trieu T<&c> tc(tz); 101728b34d86baca3282704de364b98a123baf426799Richard Trieu // CHECK-ELIDE-NOTREE: no matching constructor for initialization of 'T<&c>' 101828b34d86baca3282704de364b98a123baf426799Richard Trieu // CHECK-ELIDE-NOTREE: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'T<z>' to 'const T<&c>' for 1st argument 101928b34d86baca3282704de364b98a123baf426799Richard Trieu 102028b34d86baca3282704de364b98a123baf426799Richard Trieu U<&a, &a> uaa; 102128b34d86baca3282704de364b98a123baf426799Richard Trieu U<&b> ub(uaa); 102228b34d86baca3282704de364b98a123baf426799Richard Trieu // CHECK-ELIDE-NOTREE: no matching constructor for initialization of 'U<&b>' 102328b34d86baca3282704de364b98a123baf426799Richard Trieu // CHECK-ELIDE-NOTREE: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'U<&a, &a>' to 'const U<&b, (no argument)>' for 1st argument 102428b34d86baca3282704de364b98a123baf426799Richard Trieu 102528b34d86baca3282704de364b98a123baf426799Richard Trieu U<&b, &b, &b> ubbb(uaa); 102628b34d86baca3282704de364b98a123baf426799Richard Trieu // CHECK-ELIDE-NOTREE: no matching constructor for initialization of 'U<&b, &b, &b>' 102728b34d86baca3282704de364b98a123baf426799Richard Trieu // CHECK-ELIDE-NOTREE: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'U<&a, &a, (no argument)>' to 'const U<&b, &b, &b>' for 1st argument 102828b34d86baca3282704de364b98a123baf426799Richard Trieu 102928b34d86baca3282704de364b98a123baf426799Richard Trieu } 103028b34d86baca3282704de364b98a123baf426799Richard Trieu} 103128b34d86baca3282704de364b98a123baf426799Richard Trieu 103203bf10dc4f245a17ee4f702461cba5120cc4d09bRichard Trieunamespace DependentInt { 103303bf10dc4f245a17ee4f702461cba5120cc4d09bRichard Trieu template<int Num> struct INT; 103403bf10dc4f245a17ee4f702461cba5120cc4d09bRichard Trieu 103503bf10dc4f245a17ee4f702461cba5120cc4d09bRichard Trieu template <class CLASS, class Int_wrapper = INT<CLASS::val> > 103603bf10dc4f245a17ee4f702461cba5120cc4d09bRichard Trieu struct C; 103703bf10dc4f245a17ee4f702461cba5120cc4d09bRichard Trieu 103803bf10dc4f245a17ee4f702461cba5120cc4d09bRichard Trieu struct N { 103903bf10dc4f245a17ee4f702461cba5120cc4d09bRichard Trieu static const int val = 1; 104003bf10dc4f245a17ee4f702461cba5120cc4d09bRichard Trieu }; 104103bf10dc4f245a17ee4f702461cba5120cc4d09bRichard Trieu 104203bf10dc4f245a17ee4f702461cba5120cc4d09bRichard Trieu template <class M_T> 104303bf10dc4f245a17ee4f702461cba5120cc4d09bRichard Trieu struct M {}; 104403bf10dc4f245a17ee4f702461cba5120cc4d09bRichard Trieu 104503bf10dc4f245a17ee4f702461cba5120cc4d09bRichard Trieu void test() { 104603bf10dc4f245a17ee4f702461cba5120cc4d09bRichard Trieu using T1 = M<C<int, INT<0>>>; 104703bf10dc4f245a17ee4f702461cba5120cc4d09bRichard Trieu using T2 = M<C<N>>; 104803bf10dc4f245a17ee4f702461cba5120cc4d09bRichard Trieu T2 p; 104903bf10dc4f245a17ee4f702461cba5120cc4d09bRichard Trieu T1 x = p; 1050176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines // CHECK-ELIDE-NOTREE: no viable conversion from 'M<C<DependentInt::N, INT<1>>>' to 'M<C<int, INT<0>>>' 105103bf10dc4f245a17ee4f702461cba5120cc4d09bRichard Trieu } 105203bf10dc4f245a17ee4f702461cba5120cc4d09bRichard Trieu} 105303bf10dc4f245a17ee4f702461cba5120cc4d09bRichard Trieu 10545ce45c77fc986d13f8cf566b2c195c7cda8afde3Benjamin Kramernamespace PR17510 { 10555ce45c77fc986d13f8cf566b2c195c7cda8afde3Benjamin Kramerclass Atom; 10565ce45c77fc986d13f8cf566b2c195c7cda8afde3Benjamin Kramer 10575ce45c77fc986d13f8cf566b2c195c7cda8afde3Benjamin Kramertemplate <typename T> class allocator; 10585ce45c77fc986d13f8cf566b2c195c7cda8afde3Benjamin Kramertemplate <typename T, typename A> class vector; 10595ce45c77fc986d13f8cf566b2c195c7cda8afde3Benjamin Kramer 10605ce45c77fc986d13f8cf566b2c195c7cda8afde3Benjamin Kramertypedef vector<const Atom *, allocator<const Atom *> > AtomVector; 10615ce45c77fc986d13f8cf566b2c195c7cda8afde3Benjamin Kramer 10625ce45c77fc986d13f8cf566b2c195c7cda8afde3Benjamin Kramertemplate <typename T, typename A = allocator<const Atom *> > class vector {}; 10635ce45c77fc986d13f8cf566b2c195c7cda8afde3Benjamin Kramer 10645ce45c77fc986d13f8cf566b2c195c7cda8afde3Benjamin Kramervoid foo() { 10655ce45c77fc986d13f8cf566b2c195c7cda8afde3Benjamin Kramer vector<Atom *> v; 10665ce45c77fc986d13f8cf566b2c195c7cda8afde3Benjamin Kramer AtomVector v2(v); 1067176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines // CHECK-ELIDE-NOTREE: no known conversion from 'vector<PR17510::Atom *, [...]>' to 'const vector<const PR17510::Atom *, [...]>' 10685ce45c77fc986d13f8cf566b2c195c7cda8afde3Benjamin Kramer} 10695ce45c77fc986d13f8cf566b2c195c7cda8afde3Benjamin Kramer} 10705ce45c77fc986d13f8cf566b2c195c7cda8afde3Benjamin Kramer 1071c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesnamespace PR15677 { 1072c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinestemplate <bool> 1073c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesstruct A{}; 1074c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 1075c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinestemplate <typename T> 1076c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesusing B = A<T::value>; 1077c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 1078c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinestemplate <typename T> 1079c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesusing B = A<!T::value>; 1080c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK-ELIDE-NOTREE: type alias template redefinition with different types ('A<!T::value>' vs 'A<T::value>') 1081c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 1082c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinestemplate <int> 1083c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesstruct C{}; 1084c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 1085c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinestemplate <typename T> 1086c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesusing D = C<T::value>; 1087c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 1088c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinestemplate <typename T> 1089c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesusing D = C<T::value + 1>; 1090c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK-ELIDE-NOTREE: type alias template redefinition with different types ('C<T::value + 1>' vs 'C<T::value>') 1091c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 1092c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinestemplate <typename T> 1093c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesusing E = C<T::value>; 1094c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 1095c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinestemplate <typename T> 1096c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesusing E = C<42>; 1097c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK-ELIDE-NOTREE: type alias template redefinition with different types ('C<42>' vs 'C<T::value>') 1098c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 1099c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinestemplate <typename T> 1100c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesusing F = C<T::value>; 1101c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 1102c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinestemplate <typename T> 1103c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesusing F = C<21 + 21>; 1104c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK-ELIDE-NOTREE: type alias template redefinition with different types ('C<21 + 21 aka 42>' vs 'C<T::value>') 1105c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines} 1106c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines} 1107c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 1108176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesnamespace AddressOf { 1109176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestemplate <int*> 1110176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesstruct S {}; 1111176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 1112176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestemplate <class T> 1113176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesstruct Wrapper {}; 1114176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 1115176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestemplate <class T> 1116176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesWrapper<T> MakeWrapper(); 1117176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesint global, global2; 1118176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesconstexpr int * ptr = nullptr; 1119176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesWrapper<S<ptr>> W = MakeWrapper<S<&global>>(); 1120176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// Don't print an extra '&' for 'ptr' 1121176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-ELIDE-NOTREE: no viable conversion from 'Wrapper<S<&global>>' to 'Wrapper<S<ptr>>' 1122176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 1123176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// Handle parens correctly 1124176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesWrapper<S<(&global2)>> W2 = MakeWrapper<S<&global>>(); 1125176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-ELIDE-NOTREE: no viable conversion from 'Wrapper<S<&global>>' to 'Wrapper<S<&global2>>' 1126176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesWrapper<S<&global2>> W3 = MakeWrapper<S<(&global)>>(); 1127176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-ELIDE-NOTREE: no viable conversion from 'Wrapper<S<&global>>' to 'Wrapper<S<&global2>>' 1128176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesWrapper<S<(&global2)>> W4 = MakeWrapper<S<(&global)>>(); 1129176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-ELIDE-NOTREE: no viable conversion from 'Wrapper<S<&global>>' to 'Wrapper<S<&global2>>' 1130176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} 1131176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 1132176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesnamespace NullPtr { 1133176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestemplate <int*, int*> 1134176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesstruct S {}; 1135176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 1136176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestemplate <class T> 1137176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesstruct Wrapper {}; 1138176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 1139176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestemplate <class T> 1140176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesWrapper<T> MakeWrapper(); 1141176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesint global, global2; 1142176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesconstexpr int * ptr = nullptr; 1143176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesconstexpr int * ptr2 = static_cast<int*>(0); 1144176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 1145176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesS<&global> s1 = S<&global, ptr>(); 1146176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesS<&global, nullptr> s2 = S<&global, ptr>(); 1147176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 1148176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesS<&global, nullptr> s3 = S<&global, &global>(); 1149176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-ELIDE-NOTREE: no viable conversion from 'S<[...], &global>' to 'S<[...], nullptr>' 1150176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesS<&global, ptr> s4 = S<&global, &global>(); 1151176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-ELIDE-NOTREE: no viable conversion from 'S<[...], &global>' to 'S<[...], ptr> 1152176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 1153176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesWrapper<S<&global, nullptr>> W1 = MakeWrapper<S<&global, ptr>>(); 1154176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesWrapper<S<&global, static_cast<int*>(0)>> W2 = MakeWrapper<S<&global, ptr>>(); 1155176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 1156176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesWrapper<S<&global, nullptr>> W3 = MakeWrapper<S<&global, &global>>(); 1157176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-ELIDE-NOTREE: no viable conversion from 'Wrapper<S<[...], &global>>' to 'Wrapper<S<[...], nullptr>>' 1158176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesWrapper<S<&global, ptr>> W4 = MakeWrapper<S<&global, &global>>(); 1159176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-ELIDE-NOTREE: no viable conversion from 'Wrapper<S<[...], &global>>' to 'Wrapper<S<[...], ptr>>' 1160176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 1161176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesWrapper<S<&global2, ptr>> W5 = MakeWrapper<S<&global, nullptr>>(); 1162176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-ELIDE-NOTREE: no viable conversion from 'Wrapper<S<&global, [...]>>' to 'Wrapper<S<&global2, [...]>>' 1163176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesWrapper<S<&global2, nullptr>> W6 = MakeWrapper<S<&global, nullptr>>(); 1164176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-ELIDE-NOTREE: no viable conversion from 'Wrapper<S<&global, [...]>>' to 'Wrapper<S<&global2, [...]>>' 1165176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesWrapper<S<&global2, ptr2>> W7 = MakeWrapper<S<&global, nullptr>>(); 1166176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-ELIDE-NOTREE: no viable conversion from 'Wrapper<S<&global, [...]>>' to 'Wrapper<S<&global2, [...]>>' 1167176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesWrapper<S<&global2, nullptr>> W8 = MakeWrapper<S<&global, ptr2>>(); 1168176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-ELIDE-NOTREE: no viable conversion from 'Wrapper<S<&global, [...]>>' to 'Wrapper<S<&global2, [...]>>' 1169176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesWrapper<S<&global2, ptr>> W9 = MakeWrapper<S<&global, ptr2>>(); 1170176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-ELIDE-NOTREE: no viable conversion from 'Wrapper<S<&global, [...]>>' to 'Wrapper<S<&global2, [...]>>' 1171176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesWrapper<S<&global2, ptr2>> W10 = MakeWrapper<S<&global, ptr>>(); 1172176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-ELIDE-NOTREE: no viable conversion from 'Wrapper<S<&global, [...]>>' to 'Wrapper<S<&global2, [...]>>' 1173176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesWrapper<S<&global2, static_cast<int *>(0)>> W11 = 1174176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines MakeWrapper<S<&global, nullptr>>(); 1175176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-ELIDE-NOTREE: no viable conversion from 'Wrapper<S<&global, [...]>>' to 'Wrapper<S<&global2, [...]>>' 1176176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesWrapper<S<&global2, nullptr>> W12 = 1177176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines MakeWrapper<S<&global, static_cast<int *>(0)>>(); 1178176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-ELIDE-NOTREE: no viable conversion from 'Wrapper<S<&global, [...]>>' to 'Wrapper<S<&global2, [...]>>' 1179176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 1180176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesWrapper<S<&global, &global>> W13 = MakeWrapper<S<&global, ptr>>(); 1181176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-ELIDE-NOTREE: no viable conversion from 'Wrapper<S<[...], nullptr>>' to 'Wrapper<S<[...], &global>>' 1182176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesWrapper<S<&global, ptr>> W14 = MakeWrapper<S<&global, &global>>(); 1183176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-ELIDE-NOTREE: no viable conversion from 'Wrapper<S<[...], &global>>' to 'Wrapper<S<[...], ptr>>' 1184176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} 1185176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 1186176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesnamespace TemplateTemplateDefault { 1187176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestemplate <class> class A{}; 1188176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestemplate <class> class B{}; 1189176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestemplate <class> class C{}; 1190176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestemplate <template <class> class, template <class> class = A> 1191176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines class T {}; 1192176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 1193176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesT<A> t1 = T<A, C>(); 1194176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-ELIDE-NOTREE: no viable conversion from 'T<[...], template C>' to 'T<[...], (default) template A>' 1195176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesT<A, C> t2 = T<A>(); 1196176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-ELIDE-NOTREE: no viable conversion from 'T<[...], (default) template A>' to 'T<[...], template C>' 1197176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesT<A> t3 = T<B>(); 1198176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-ELIDE-NOTREE: no viable conversion from 'T<template B>' to 'T<template A>' 1199176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesT<B, C> t4 = T<C, B>(); 1200176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-ELIDE-NOTREE: no viable conversion from 'T<template C, template B>' to 'T<template B, template C>' 1201176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesT<A, A> t5 = T<B>(); 1202176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-ELIDE-NOTREE: no viable conversion from 'T<template B, [...]>' to 'T<template A, [...]>' 1203176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesT<B> t6 = T<A, A>(); 1204176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-ELIDE-NOTREE: no viable conversion from 'T<template A, [...]>' to 'T<template B, [...]>' 1205176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} 1206176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 1207176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesnamespace Bool { 1208176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestemplate <class> class A{}; 1209176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesA<bool> a1 = A<int>(); 1210176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-ELIDE-NOTREE: no viable conversion from 'A<int>' to 'A<bool>' 1211176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesA<int> a2 = A<bool>(); 1212176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-ELIDE-NOTREE: no viable conversion from 'A<bool>' to 'A<int>' 1213176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} 1214176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 1215176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesnamespace TypeAlias { 1216176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestemplate <int, int = 0> class A {}; 1217176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 1218176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestemplate <class T> using a = A<T::num, 0>; 1219176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestemplate <class T> using a = A<T::num>; 1220176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 1221176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestemplate <class T> using A1 = A<T::num>; 1222176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestemplate <class T> using A1 = A<T::num + 0>; 1223176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-ELIDE-NOTREE: type alias template redefinition with different types ('A<T::num + 0>' vs 'A<T::num>') 1224176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 1225176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestemplate <class T> using A2 = A<1 + T::num>; 1226176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestemplate <class T> using A2 = A<T::num + 1>; 1227176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-ELIDE-NOTREE: type alias template redefinition with different types ('A<T::num + 1>' vs 'A<1 + T::num>') 1228176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 1229176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestemplate <class T> using A3 = A<(T::num)>; 1230176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestemplate <class T> using A3 = A<T::num>; 1231176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-ELIDE-NOTREE: error: type alias template redefinition with different types ('A<T::num>' vs 'A<(T::num)>') 1232176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 1233176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines template <class T> using A4 = A<(T::num)>; 1234176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestemplate <class T> using A4 = A<((T::num))>; 1235176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-ELIDE-NOTREE: type alias template redefinition with different types ('A<((T::num))>' vs 'A<(T::num)>') 1236176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 1237176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestemplate <class T> using A5 = A<T::num, 1>; 1238176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestemplate <class T> using A5 = A<T::num>; 1239176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-ELIDE-NOTREE: type alias template redefinition with different types ('A<[...], (default) 0>' vs 'A<[...], 1>') 1240176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 1241176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestemplate <class T> using A6 = A<T::num + 5, 1>; 1242176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestemplate <class T> using A6 = A<T::num + 5>; 1243176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-ELIDE-NOTREE: type alias template redefinition with different types ('A<[...], (default) 0>' vs 'A<[...], 1>') 1244176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 1245176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestemplate <class T> using A7 = A<T::num, 1>; 1246176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestemplate <class T> using A7 = A<(T::num)>; 1247176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-ELIDE-NOTREE: type alias template redefinition with different types ('A<(T::num), (default) 0>' vs 'A<T::num, 1>') 1248176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} 1249176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 12500e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesnamespace TemplateArgumentImplicitConversion { 12510e2c34f92f00628d48968dfea096d36381f494cbStephen Hinestemplate <int X> struct condition {}; 12520e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 12530e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstruct is_const { 12540e2c34f92f00628d48968dfea096d36381f494cbStephen Hines constexpr operator int() const { return 10; } 12550e2c34f92f00628d48968dfea096d36381f494cbStephen Hines}; 12560e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 12570e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesusing T = condition<(is_const())>; 12580e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesvoid foo(const T &t) { 12590e2c34f92f00628d48968dfea096d36381f494cbStephen Hines T &t2 = t; 12600e2c34f92f00628d48968dfea096d36381f494cbStephen Hines} 12610e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK-ELIDE-NOTREE: binding of reference to type 'condition<[...]>' to a value of type 'const condition<[...]>' drops qualifiers 12620e2c34f92f00628d48968dfea096d36381f494cbStephen Hines} 12630e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 12640e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesnamespace BoolArgumentBitExtended { 12650e2c34f92f00628d48968dfea096d36381f494cbStephen Hinestemplate <bool B> struct BoolT {}; 12660e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 12670e2c34f92f00628d48968dfea096d36381f494cbStephen Hinestemplate <typename T> void foo(T) {} 12680e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 12690e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesvoid test() { 12700e2c34f92f00628d48968dfea096d36381f494cbStephen Hines BoolT<false> X; 12710e2c34f92f00628d48968dfea096d36381f494cbStephen Hines foo<BoolT<true>>(X); 12720e2c34f92f00628d48968dfea096d36381f494cbStephen Hines} 12730e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK-ELIDE-NOTREE: no matching function for call to 'foo' 12740e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK-ELIDE-NOTREE: candidate function [with T = BoolArgumentBitExtended::BoolT<true>] not viable: no known conversion from 'BoolT<0>' to 'BoolT<1>' for 1st argument 12750e2c34f92f00628d48968dfea096d36381f494cbStephen Hines} 12760e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 1277246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-NOTREE: {{[0-9]*}} errors generated. 1278246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-NOTREE: {{[0-9]*}} errors generated. 1279246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-ELIDE-TREE: {{[0-9]*}} errors generated. 1280246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu// CHECK-NOELIDE-TREE: {{[0-9]*}} errors generated. 1281