// RUN: %clang_cc1 -fsyntax-only -verify %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'}} }