template <typename T>
struct Base {
  T value;
  Base(T value) : value(value) { }
};

template <typename T>
struct Test : public Base<T> {
  typedef Base<T> parent;
  T getValue() { return this->value; }  // why do I need to use parent:: here?
  Test(T value) : parent(value) { }
};

#include <iostream>
int main()
{
  Test<int> t(1);
  std::cout << t.getValue() <<std::endl;
}