テンプレートクラスの継承

基底クラスをテンプレートクラスとする継承がある場合...

template <class T>
class Base
{
public:
  Base() : m_(0) {}
  virtual ~Base() {}

protected:
  int m_;
};

template <class T>
class Derived : public Base<T>
{
public:
  Derived() {}
  virtual ~Derived() {}

  void DoIt() { m_ = 99; }
};

gcc 3.4.4 でコンパイルすると怒られる。

Test.cpp: In member function `void Derived<T>::DoIt()':
Test.cpp|46| error: `m_' undeclared (first use this function)
Test.cpp|46| error: (Each undeclared identifier is reported only once for each function it appears in.)

そういうもん?