Because TestBase could be specialized on X whatever X ends up being. Therefore you need to let the compile know someInt is a dependent value by fully qualifying it. Instead of
someInt = 0
say rather
TestBase<X>::someInt = 0
You could also use
this->someInt = 0
The point is the compiler will not assume a name is dependent on a template parameter it must know it is before it defers that check to instantiation time. For an experiment see what happens when you introduce a global someInt.
Logan Capaldo
2010-07-19 00:43:39