$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
From: Thomas Matelich (matelich_at_[hidden])
Date: 2005-03-08 10:59:25
Thanks for the tips on tracking it down.  For the time being, I'm just
changing implicit conversions of rev_iterator to const_rev_iterator. 
It's not that important a feature for the amount of time I've been
spending on it.
On Mon, 07 Mar 2005 21:05:52 -0500, David Abrahams
<dave_at_[hidden]> wrote:
> Thomas Matelich <matelich_at_[hidden]> writes:
> 
> > On Tue, 01 Mar 2005 12:55:21 -0500, David Abrahams
> > <dave_at_[hidden]> wrote:
> >> Thomas Matelich <matelich_at_[hidden]> writes:
> >>
> >> >    I'm a little behind the times and am trying to port my old
> >> > iterator_adapters code to use the new library (1.32).  We have a class
> >> > which is little more than a wrapper around a vector<shared_ptr<T> >,
> >> > and I am having a heck of a time with setting its typedef for
> >> > reverse_iterator and const_reverse_iterator.  I just can't get
> >> > const_reverse_iterator to do assignment and comparison with
> >> > reverse_iterator.
> >> >
> >> > I've tried to make indirect_iterators out of the native reverse
> >> > iterators,
> >>
> >> That almost certainly won't work, because the native reverse_iterator
> >> usually won't play nicely with the native const_reverse_iterator.
> >>
> >> > using boost::reverse_iterators of indirect_iterators
> >>
> >> What happens when you do that? (code, error messages)
> >> Have you verified that the const and mutable indirect_iterators
> >> interoperate the way you'd like?
> >>
> >
> > So, of course, my sample application (attached) compiles just fine.
> 
> No it doesn't:
> 
> vc-C++ c:\build\bin\tmp\foo.test\vc7.1\debug-python\threading-multi\foo.obj
> foo.cpp
> foo.cpp(255) : error C2662: 'TestItem::setItemKey' : cannot convert 'this' pointer from 'const boost::detail::add_pointer_impl<T>::no_ref_type' to 'TestItem &'
>         with
>         [
>             T=const boost::detail::iterator_facade_types<boost::mpl::identity<boost::detail::smart_ptr_pointee<boost::detail::indirect_base<ZUtil::SmartList<TestItem>::native_iterator,boost::use_default,boost::use_default,boost::use_default,boost::use_default>::dereferenceable>::type>::type,boost::mpl::identity<boost::random_access_traversal_tag>::type,boost::mpl::identity<boost::detail::smart_ptr_reference<boost::detail::indirect_base<ZUtil::SmartList<TestItem>::native_iterator,boost::use_default,boost::use_default,boost::use_default,boost::use_default>::dereferenceable>::type >::type ,boost::iterator_difference<ZUtil::SmartList<TestItem>::native_iterator>::type>::value_type
>         ]
>         Conversion loses qualifiers
> 
> But of course, you should have commented out the line that says:
> 
> >    c_r_iter->setItemKey(33,33);   //does compile for new
> 
> Then it does compile just fine.  Clearly you are doing something
> significantly different in your sample application.
> 
> > In my failing version
> > assigning a rev_iterator to a const_rev_iterator fails with the
> > following error:
> >
> > smartlisttest.cpp(352) : error C2440: 'initializing' : cannot convert
> > from 'ZUtil::SmartList<T>::rev_iterator' to
> > 'boost::reverse_iterator<Iterator>'
> >         with
> >         [
> >             T=TestItem
> >         ]
> >         and
> >         [
> >             Iterator=ZUtil::SmartList<TestItem>::const_iterator
> >         ]
> >         No constructor could take the source type, or constructor
> > overload resolution was ambiguous
> 
> Well, it seems as though
> 
>    ZUtil::SmartList<TestItem>::rev_iterator
> 
> and
> 
>    boost::reverse_iterator<ZUtil::SmartList<TestItem>::const_iterator>
> 
> must not be the same type in your failing version.  If the problem
> isn't immediately obvious, I suggest you run your code through the VC8
> public beta.  Jason Shirk, at my urging, implemented a fix to the
> error reporting that will unwind the typedefs in the error message so
> you can see what types are actually involved.
> 
> 
> --
> Dave Abrahams
> Boost Consulting
> www.boost-consulting.com
> 
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://listarchives.boost.org/mailman/listinfo.cgi/boost-users
>