Цель using base<T>::foo
в области действия функции заключается в том, что вы хотите вызвать foo
в функции, и, поскольку она выдает ошибку, вы не можете этого сделать.
Если вы хотите вызвать functon (в противном случае, почему вы это сделаете), вы можете сделать следующее:
this->template base<T>::foo(); //syntax 1
this->base<T>::foo(); //syntax 2 - simple
this->foo(); //syntax 3 - simpler
Однако, вы не можете написать это:
foo() ; //error - since foo is in base class template!
//if you write `using base<T>::foo` at class scope, it will work!
Демонстрация на ideone: http://www.ideone.com/vfDNs
Прочтите это, чтобы узнать, когда должен использовать ключевое слово template
в вызове функции:
Гадкие ошибки компилятора с шаблоном