// RUN: %clang_cc1 -std=c++2a -x c++ %s -verify template concept C = false; // expected-note 9{{because}} template struct S { template static void foo1(U a, auto b); static void foo2(T a, C auto b); // expected-note@-1{{candidate template ignored}} expected-note@-1{{because}} static void foo3(T a, C auto b); // expected-note@-1{{candidate template ignored}} expected-note@-1{{because}} static void foo4(T a, C auto b, const C auto &&c); // expected-note@-1{{candidate template ignored}} expected-note@-1{{because}} }; using sf1 = decltype(S::foo1(1, 2)); using sf2 = decltype(S::foo2(1, 2)); // expected-error{{no matching function}} using sf3 = decltype(S::foo3(1, 2)); // expected-error{{no matching function}} using sf4 = decltype(S::foo4(1, 2, 3)); // expected-error{{no matching function}} template struct G { static void foo1(auto a, const C auto &&... b); // expected-note@-1{{candidate template ignored}} expected-note@-1{{because}} expected-note@-1 3{{and}} static void foo2(auto a, const C auto &&... b); // expected-note@-1{{candidate template ignored}} expected-note@-1{{because}} expected-note@-1{{and}} }; using gf1 = decltype(G::foo1('a', 1, 2, 3, 4)); // expected-error{{no matching function}} using gf2 = decltype(G::foo2('a', 1, 2)); // expected-error{{no matching function}} // Regression (bug #45102): check that instantiation works where there is no // TemplateTypeParmDecl template using id = T; template constexpr void g() { id f; } static_assert((g(), true));