// RUN: %clang_cc1 -verify -fsyntax-only %s
// Verify the absence of assertion failures when solving calls to unresolved
// template member functions.

struct A {
  template <typename T>
  static void bar(int) { } // expected-note {{candidate template ignored: couldn't infer template argument 'T'}}
};

struct B {
  template <int i>
  static void foo() {
    int array[i];
    A::template bar(array[0]); // expected-error {{no matching function for call to 'bar'}}
  }
};

int main() {
  B::foo<4>(); // expected-note {{in instantiation of function template specialization 'B::foo<4>'}}
  return 0;
}

namespace GH70375 {

template <typename Ty>
struct S {
  static void bar() {
    Ty t;
    t.foo();
  }

  static void take(Ty&) {}
};

template <typename P>
struct Outer {
  template <typename C>
  struct Inner;

  using U = S<Inner<P>>;

  template <>
  struct Inner<void> {
    void foo() {
      U::take(*this);
    }
  };
};

void instantiate() {
  Outer<void>::U::bar();
}

}

namespace GH89374 {

struct A {};

template <typename Derived>
struct MatrixBase { // #GH89374-MatrixBase
  template <typename OtherDerived>
  Derived &operator=(const MatrixBase<OtherDerived> &); // #GH89374-copy-assignment
};

template <typename>
struct solve_retval;

template <typename Rhs>
struct solve_retval<int> : MatrixBase<solve_retval<Rhs> > {};
// expected-error@-1 {{partial specialization of 'solve_retval' does not use any of its template parameters}}

void ApproximateChebyshev() {
  MatrixBase<int> c;
  c = solve_retval<int>();
  // expected-error@-1 {{no viable overloaded '='}}
  //   expected-note@#GH89374-copy-assignment {{candidate template ignored: could not match 'MatrixBase' against 'solve_retval'}}
  //   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}}
  //   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}}
}

} // namespace GH89374
