B>template<class R, class T>
B>R CallMe(R (T::*mem_fn)()) { T t; return (t.*mem_fn)(); }
Это другая конструкция с точки зрения типов — здесь такая же разница как между следующими двумя функциями:
template <int parameter>
void Function ()
{
}
void Function (int parameter)
{
}
Чувствуете разницу?
Но, похоже, C++ не умеет «в одном параметре передавать два типа».
Так что, уродскую конструкцию
CallMe<MyInterface, &MyInterface::MyMethod>();
не заменишь на
CallMe<&MyInterface::MyMethod>();