Оператор сравнения, не являющийся членом класса шаблона

Я определил контейнер шаблона Tree<T>с двумя итераторами класса члена: const_iterator а также iterator

Теперь я хотел бы добавить операторы сравнения, не являющиеся членами:

template<typename T>
bool operator==(Tree<T>::const_iterator a, Tree<T>::iterator b)
{
    return a.ptr() == b.ptr();
}

Но у меня есть ошибка компиляции:

declaration of 'operator==' as non-function

Зачем? Это из-за шаблона?

1 ответ

Решение

Вам нужно использовать typename для зависимого имени здесь, например

template<typename T>
bool operator==(typename Tree<T>::const_iterator a, typename Tree<T>::iterator b)
//              ~~~~~~~~                            ~~~~~~~~
{
    return a.ptr() == b.ptr();
}
Другие вопросы по тегам