Como uma classe base C ++ pode determinar em tempo de execução se um método foi substituído?

O método de exemplo abaixo destina-se a detectar se ele foi ou não substituído em uma classe derivada. O erro que recebo do MSVC implica que é simplesmente errado tentar obter o ponteiro de função para um membro "ligado", mas não vejo nenhuma razão lógica por que isso deve ser um problema (afinal, ele estará emesta-> vtable). Existe alguma maneira não-hacky de consertar este código?

class MyClass
{
public:
    typedef void (MyClass::*MethodPtr)();  

    virtual void Method()
    {
        MethodPtr a = &MyClass::Method; // legal
        MethodPtr b = &Method;  // <<< error C2276: ‘&’ : illegal operation on bound member function expression

        if (a == b)     // this method has not been overridden?
            throw “Not overridden”;
    }
};