>>697
原理的に無理。C++ には final キーワードがない以上

class C : public B
{
protected:
  virtual void hage();
};

と定義することも可能で、この場合 C::hoge() の中では C::hage() を呼ぶ必要が
あるでしょ?

// インライン展開したら、これに C のインスタンスが渡されたときに
// 不正な動作をすることになる
void call_hoge(B* p) { p->hoge(); }

目的が 10000000 回 hage() を呼ぶという処理を共有したい (Strategy パターン
を効率よく実装したい) ならテンプレート使うかな。

template <class T>
struct HogeMixin
{
  void hoge()
  {
    for( int i = 0; i < 10000000; ++i )
      static_cast<T*>(this)->hage();
  }
};

class B : public HogeMixin<B>
{
  void hage() { ::GlobalCount++; }
  friend struct HogeMixin<B>;
};