Ошибка при вызове метода шаблона в "templated-base-class"

Следующий код не компилируется, почему так? И как я могу это исправить?

struct A{
    template<int N> int get() { return N; }
};

template <typename X>
struct B : public X {
    template<int N> int get() {
        return X::get<N>();
    }
};

int main(int argc, const char *argv[])
{
    B<A> b;
    return b.get<5>();
}

Ошибка компилятора:

test.cxx: In member function ‘int B<X>::get()’:
test.cxx:8:30: error: expected primary-expression before ‘)’ token
test.cxx: In member function ‘int B<X>::get() [with int N = 5, X = A]’:
test.cxx:15:25:   instantiated from here
test.cxx:8:30: error: invalid operands of types ‘<unresolved overloaded function type>’ and ‘int’ to  binary ‘operator<’

1 ответ

Решение

Вы должны устранить неоднозначность, вот так:

template<int N>int get() {
    return X::template get<N>();
}
Другие вопросы по тегам