Оператор сравнения, не являющийся членом класса шаблона
Я определил контейнер шаблона 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();
}