
Hi all, I had a boost::iterator_facade derived iterator implemented as follow: class ole_directory_iterator : public boost::iterator_facade< POLE::ole_directory_iterator, POLE::path, boost::forward_traversal_tag> { public://Interface enum { Ok = 0, NotOk }; bool good() { return (this->m_result == Ok); } //Constructors ole_directory_iterator() : m_storage(0) { this->m_dirlist.clear(); this->m_current = -1; this->m_result = Ok; } ole_directory_iterator(const std::string& a_filename); //Destructor ~ole_directory_iterator() { m_dirlist.clear(); } private://Implementation friend class boost::iterator_core_access; void Init(); void increment() { if ((this->m_current + 1) >= this->m_dirlist.size()) { this->m_current = -1; return; } ++this->m_current; } bool equal(const ole_directory_iterator& a_iter) const { if ((a_iter.m_current == -1) && (this->m_current == a_iter.m_current) && (a_iter.m_storage == 0)) { return true; } return ((this->m_current == a_iter.m_current) && (this->m_storage == a_iter.m_storage)); } POLE::path& dereference() const { if (this->m_current != -1) { POLE::path& _path = (POLE::path&)this->m_dirlist[this->m_current]; return _path; } return POLE::path(0, ""); } private://Data Members short m_result; std::vector<POLE::path> m_dirlist; long m_current; Storage* m_storage; };//ole_directory_iterator when I write the following code: POLE::ole_directory_iterator _it(argv[1]); POLE::ole_directory_iterator _endIt(); for (; _it != _endIt; ++_it) { POLE::path _path = *_it; } I get the following error with MSVC 7.1: c:\...\pole++.cpp(20): error C2784: 'detail::enable_if_interoperable<Derived1,Derived2,mpl::apply2<boost::detail::always_bool2,Derived1,Derived2>::type>::type boost::operator !=(const boost::iterator_facade<Derived1,V1,TC1,R1,D1> &,const boost::iterator_facade<Derived2,V2,TC2,R2,D2> &)' : could not deduce template argument for 'const boost::iterator_facade<Derived,Value,CategoryOrTraversal,Reference,Difference> &' from 'POLE::ole_directory_iterator' c:\Boost\include\boost-1_32\boost\iterator\iterator_facade.hpp(837) : see declaration of 'boost::operator`!='' I'm modifying some one else library, but I get the last version from the author and added the modifications to the new sources, this code works with the last library sources but not with the new one. I check the sources more than once and there are no differences. I'll be glad if some one give me a hint. best regards and thanks in advance Israel

when I write the following code:
POLE::ole_directory_iterator _it(argv[1]); POLE::ole_directory_iterator _endIt();
Israel Fdez. Cabrera wrote: this declares a function-------------^^ not an iterator. Try dropping the parens.
for (; _it != _endIt; ++_it) { POLE::path _path = *_it; }
I get the following error with MSVC 7.1:
c:\...\pole++.cpp(20): error C2784: 'detail::enable_if_interoperable<Derived1,Derived2,mpl::apply2<boost::detail::always_bool2,Derived1,Derived2>::type>::type boost::operator !=(const boost::iterator_facade<Derived1,V1,TC1,R1,D1> &,const boost::iterator_facade<Derived2,V2,TC2,R2,D2> &)' : could not deduce template argument for 'const boost::iterator_facade<Derived,Value,CategoryOrTraversal,Reference,Difference> &' from 'POLE::ole_directory_iterator'
c:\Boost\include\boost-1_32\boost\iterator\iterator_facade.hpp(837) : see declaration of 'boost::operator`!=''
I'm modifying some one else library, but I get the last version from the author and added the modifications to the new sources, this code works with the last library sources but not with the new one. I check the sources more than once and there are no differences. I'll be glad if some one give me a hint.
-- Dave Abrahams Boost Consulting http://www.boost-consulting.com
participants (2)
-
David Abrahams
-
Israel Fdez. Cabrera