Как уже упоминалось, это именно то, как работает язык.
Другим решением является использование наследования и переход к родительскому методу:
class Derived : public Base
{
protected:
int d;
public:
void DoSomething(const Base& that)
{
Base::DoSomething(that);
d=0;
}
};