Как вызвать функцию-член шаблона в базовом классе шаблона ?

При вызове не шаблонной функции-члена в базовом классе можно импортировать ее имя с помощью , используя , в производный класс, а затем использовать его . Возможно ли это также для функций-членов шаблона в базовом классе?

Просто с с использованием это не работает (с g ++ - snapshot-20110219 -std = c ++ 0x):

template <typename T>
struct A {
  template <typename T2> void f() {  }
};

template <typename T>
struct B : A<T> {
  using A<T>::f;

  template <typename T2> void g() {
    // g++ throws an error for the following line: expected primary expression before `>`
    f<T2>();
  }
};

int main() {
  B<float> b;
  b.g<int>();
}

Я знаю, что явный префикс базового класса, как в

    A<T>::template f<T2>();

, работает нормально, но вопрос в следующем: возможно ли это без и с простым объявлением using (точно так же, как в случае, когда f не функция шаблона)?

Если это невозможно, кто-нибудь знает, почему?

5
задан Lars 9 March 2011 в 04:50
поделиться