Ошибка при вызове метода шаблона в "templated-base-class" - PullRequest
3 голосов
/ 06 января 2012

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

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 Ответ

5 голосов
/ 06 января 2012

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

template<int N>int get() {
    return X::template get<N>();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...