использование объявлений для шаблонной функции базового класса шаблона

Я хочу использовать шаблонную функцию базового класса, например так:

struct A {
template <class T> static auto f() { \*code*\ }
};

template <class A_type> struct B : public A_type {

using A_type::f;

void g() { auto n = f<int>(); }
};

Это не компилируется однако.

error: expected '(' for function-style cast or type
construction
void g() { auto n = f<int>(); }
~~~^
error: expected expression
void g() { auto n = f<int>(); }

Но ссылка на базовый класс напрямую вместо шаблона работает:

struct A {
template <class T> static auto f() { \*code*\ }
};

template <class A_type> struct B : public A_type {

using A::f;

void g() { auto n = f<int>(); }
};

Почему первая версия не компилируется, а вторая — нет. И что мне нужно сделать по-другому, чтобы это работало?

4

Решение

Компилятор не знает, что f в f<int>() это шаблон, отсюда и сообщение об ошибке.

Вы можете сделать это без using вот так:

struct A {
template <class T> static auto f() { /*code*/ }
};

template <class A_type> struct B : public A_type {
void g() { auto n = A_type::template f<int>(); }
};
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]