Я работаю над устаревшим кодом со старым компилятором Solaris на Solaris 10 (здесь нет новых раскрученных C ++ 0x; -)
-bash-3.2 $ CC -V
CC: Sun C ++ 5.12 SunOS_sparc 2011/11/16
У меня есть сторонний словарный класс с итератором
template<K, V>
class DictIterator
{
public:
DictIterator(TheDictClass<K, V>& collection);
K key() const;
V value() const;
// advance the iterator. return true if iterator points to a valid item
bool operator()();
...
};
Мой код долженпросмотреть каждый элемент в словаре, но есть ошибка компиляции, которую я не могу объяснить:
DictIterator iterator(theDictionary);
while(iterator())
{
cout << iterator.key();
}
Сбой с "filename.cc", line 42: Error: The operation "ostream_withassign<<Key" is illegal.
Но эта версия работает:
DictIterator iterator(theDictionary);
while(iterator())
{
Key key(iterator.key());
cout << key;
}
Очевидно, у меня есть обходной путь, но я подумал, что, поскольку DictIterator.key()
возвращает K
(не ссылка), два фрагмента были довольно похожи.Может кто-нибудь дать мне знать, в какой странный угол C ++ я только что натолкнулся?
edit: Чтобы отвечать на комментарии, <<
переопределяется ostream& operator(ostream &, Key&);