83 lines · cpp
1// RUN: %clang_cc1 -verify -fsyntax-only %s2// Verify the absence of assertion failures when solving calls to unresolved3// template member functions.4 5struct A {6 template <typename T>7 static void bar(int) { } // expected-note {{candidate template ignored: couldn't infer template argument 'T'}}8};9 10struct B {11 template <int i>12 static void foo() {13 int array[i];14 A::template bar(array[0]); // expected-error {{a template argument list is expected after a name prefixed by the template keyword}} expected-error {{no matching function for call to 'bar'}}15 }16};17 18int main() {19 B::foo<4>(); // expected-note {{in instantiation of function template specialization 'B::foo<4>'}}20 return 0;21}22 23namespace GH70375 {24 25template <typename Ty>26struct S {27 static void bar() {28 Ty t;29 t.foo();30 }31 32 static void take(Ty&) {}33};34 35template <typename P>36struct Outer {37 template <typename C>38 struct Inner;39 40 using U = S<Inner<P>>;41 42 template <>43 struct Inner<void> {44 void foo() {45 U::take(*this);46 }47 };48};49 50void instantiate() {51 Outer<void>::U::bar();52}53 54}55 56namespace GH89374 {57 58struct A {};59 60template <typename Derived>61struct MatrixBase { // #GH89374-MatrixBase62 template <typename OtherDerived>63 Derived &operator=(const MatrixBase<OtherDerived> &); // #GH89374-copy-assignment64};65 66template <typename>67struct solve_retval;68 69template <typename Rhs>70struct solve_retval<int> : MatrixBase<solve_retval<Rhs> > {};71// expected-error@-1 {{partial specialization of 'solve_retval' does not use any of its template parameters}}72 73void ApproximateChebyshev() {74 MatrixBase<int> c;75 c = solve_retval<int>();76 // expected-error@-1 {{no viable overloaded '='}}77 // expected-note@#GH89374-copy-assignment {{candidate template ignored: could not match 'MatrixBase' against 'solve_retval'}}78 // expected-note@#GH89374-MatrixBase {{candidate function (the implicit copy assignment operator) not viable: no known conversion from 'solve_retval<int>' to 'const MatrixBase<int>' for 1st argument}}79 // expected-note@#GH89374-MatrixBase {{candidate function (the implicit move assignment operator) not viable: no known conversion from 'solve_retval<int>' to 'MatrixBase<int>' for 1st argument}}80}81 82} // namespace GH8937483