+2  A: 

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
Or instead of full qualification just use `this->someInt`.
Georg Fritzsche
Yep, just added that.
Logan Capaldo
Please note that deferring lookup until instantiation is not enough. The Standard explicitly says that even at instantiation time, unqualified names are not looked up in dependent base classes during unqualified lookup. It happens to work for `this->someInt` and others because those don't do unqualified lookup. This detail is often overlooked when reasoning about it, but it's important.
Johannes Schaub - litb