brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.2 KiB · 1832aaf Raw
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