// RUN: %clang_cc1 -std=c++2a -x c++ %s -verify

template<typename...>
concept C = false; // expected-note 9{{because}}

template<typename T>
struct S {
    template<typename U>
    static void foo1(U a, auto b);
    static void foo2(T a, C<T> auto b);
    // expected-note@-1{{candidate template ignored}} expected-note@-1{{because}}
    static void foo3(T a, C<decltype(a)> auto b);
    // expected-note@-1{{candidate template ignored}} expected-note@-1{{because}}
    static void foo4(T a, C<decltype(a)> auto b, const C<decltype(b)> auto &&c);
    // expected-note@-1{{candidate template ignored}} expected-note@-1{{because}}
};

using sf1 = decltype(S<int>::foo1(1, 2));
using sf2 = decltype(S<int>::foo2(1, 2)); // expected-error{{no matching function}}
using sf3 = decltype(S<int>::foo3(1, 2)); // expected-error{{no matching function}}
using sf4 = decltype(S<int>::foo4(1, 2, 3)); // expected-error{{no matching function}}


template<typename... T>
struct G {
    static void foo1(auto a, const C<decltype(a)> auto &&... b);
    // expected-note@-1{{candidate template ignored}} expected-note@-1{{because}} expected-note@-1 3{{and}}
    static void foo2(auto a, const C<decltype(a), T> auto &&... b);
    // expected-note@-1{{candidate template ignored}} expected-note@-1{{because}} expected-note@-1{{and}}
};

using gf1 = decltype(G<int, char>::foo1('a', 1, 2, 3, 4)); // expected-error{{no matching function}}
using gf2 = decltype(G<int, char>::foo2('a', 1, 2)); // expected-error{{no matching function}}


// Regression (bug #45102): check that instantiation works where there is no
// TemplateTypeParmDecl
template <typename T> using id = T;

template <typename T>
constexpr void g() {
  id<void (T)> f;
}

static_assert((g<int>(), true));