From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id 897063858C39; Wed, 15 Sep 2021 20:29:46 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 897063858C39 From: "dangelog at gmail dot com" To: gcc-bugs@gcc.gnu.org Subject: [Bug c++/102283] Inconsistent/wrong overload resolution when using an initializer list and a defaulted template parameter Date: Wed, 15 Sep 2021 20:29:46 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: c++ X-Bugzilla-Version: 11.2.1 X-Bugzilla-Keywords: wrong-code X-Bugzilla-Severity: normal X-Bugzilla-Who: dangelog at gmail dot com X-Bugzilla-Status: UNCONFIRMED X-Bugzilla-Resolution: X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-BeenThere: gcc-bugs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-bugs mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Sep 2021 20:29:46 -0000 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D102283 --- Comment #2 from Giuseppe D'Angelo --- Hi, Do you think that in my original testcase the call should be rejected as ambiguous as well? (It seems "reasonable" to me, but maybe I'm missing some niche detail about overload resolution when combined with template deductio= n.) This small variation over the testcase: struct A { }; struct B { }; template void f(T &&); // #1 void f(const B&) =3D delete; // #2 int main() { f({}); } This now makes GCC select #2, and fail to compile because it's deleted; Cla= ng and MSVC still select #1. But a further, minor change: struct A { }; struct B { }; template // <-- changed this void f(T &&); // #1 void f(const B&) =3D delete; // #2 int main() { f({}); } makes GCC select #1...=