// RUN: %clang_cc1 -fsyntax-only -verify %s // RUN: %clang_cc1 -std=c++23 -verify -fsyntax-only %s enum copy_traits { movable = 1 }; template struct optional_ctor_base {}; template struct ctor_copy_traits { // this would produce a c++98-compat warning, which would erroneously get the // no-matching-function-call error's notes attached to it (or suppress those // notes if this diagnostic was suppressed, as it is in this case) static constexpr int traits = copy_traits::movable; }; template struct optional : optional_ctor_base::traits> { template constexpr optional(U&& v); }; struct A {}; struct XA { XA(const A&); }; struct B {}; struct XB { XB(const B&); XB(const optional&); }; struct YB : XB { using XB::XB; }; void InsertRow(const XA&, const YB&); // expected-note {{candidate function not viable: no known conversion from 'int' to 'const XA' for 1st argument}} void ReproducesBugSimply() { InsertRow(3, B{}); // expected-error {{no matching function for call to 'InsertRow'}} } #if __cplusplus >= 202302L namespace overloadCheck{ template concept AlwaysTrue = true; struct S { int f(AlwaysTrue auto) { return 1; } void f(this S&&, auto) {} void g(auto) {} int g(this S&&,AlwaysTrue auto) {return 1;} int h(AlwaysTrue auto) { return 1; } //expected-note {{previous definition is here}} int h(this S&&,AlwaysTrue auto) { // expected-error {{class member cannot be redeclared}} return 1; } }; int main() { int x = S{}.f(0); int y = S{}.g(0); } } #endif namespace GH93076 { template int b(a..., int); // expected-note-re 3 {{candidate function template not viable: no known conversion from 'int ()' to 'int' for {{.*}} argument}} int d() { (void)b(0, 0, d); // expected-error {{no matching function for call to 'b'}} (void)b(0, d, 0); // expected-error {{no matching function for call to 'b'}} (void)b(d, 0, 0); // expected-error {{no matching function for call to 'b'}} return 0; } }