Я только что выпустил библиотеку контейнеров скиплиста. И компилятор Sun жалуется на это:
template <class T, class R>
bool operator==(const IndexedSkipList<T,R> &left, const IndexedSkipList<T,R> &right)
{
return ((left.size() == right.size()) &&
(std::equal(left.begin(), left.end(), right.begin())));
}
Ошибки:
"include/CSIndexedSkipList.h", line 65: Error: Too few arguments for template std::reverse_iterator<CS::BidiIdxIterator<CS::IndexedSkipList<CS::T, CS::R>>>.
"include/CSIndexedSkipList.h", line 207: Where: While specializing "CS::IndexedSkipList<CS::T, CS::R>".
"include/CSIndexedSkipList.h", line 207: Where: Specialized in non-template code.
Приведенный выше код начинается с 207. Но похоже, что он жалуется на reverse_iterator. Я не могу понять это. У меня нет прямого доступа к компилятору Sun, поэтому мне было интересно, что я делаю что-то не так.
Кроме того, я использую только один аргумент шаблона в reverse_iterator, но я заметил, что в документации SGI говорится, что для второго аргумента T нет значения по умолчанию. Везде, где я смотрел, они просто используют это:
typedef std::reverse_iterator<iterator> reverse_iterator;
Это строка 65, на которую жалуется компилятор. Нужно ли добавлять T в качестве параметра? Я не могу понять ошибку, о которой идет речь.
Кстати, это работает на gcc на всех платформах, которые я смог найти. И это работает и в Borland.