Потому что TestBase может быть специализирована на X, чем бы X ни стал. Поэтому вам нужно сообщить компиляции, что someInt является зависимым значением, полностью определив его.Вместо
someInt = 0
скажите скорее
TestBase<X>::someInt = 0
Вы также можете использовать
this->someInt = 0
. Дело в том, что компилятор не будет предполагать, что имя зависит от параметра шаблона, он должен знать это, прежде чем отложит эту проверку до времени создания экземпляра. В качестве эксперимента посмотрите, что происходит, когда вы вводите глобальный someInt.