
On 17 April 2012 13:03, Jens Auer <jensa@miltenyibiotec.de> wrote:
bool equal(Enumerator<Iterator, T> const& other) const
{
return mPos == mPos;
}
You likely have a bug above, should read other.mPos.
My second problem can be reproduced with the following sample program on both msvc and g++:
#include <vector>
#include <iostream>
#include <algorithm>
void foo()
{
std::vector<int> v;
auto i = Iterator::enumerate(v.begin(), 0, 1);
auto y = i->count;
auto z = i->value;
}
MSVC:
Error 3 error C2664: 'boost::implicit_cast' : cannot convert parameter 1 from 'Iterator::Enumerated<T,X> *' to 'boost::detail::operator_arrow_proxy<T>' c:\software development\externals\include\boost\iterator\iterator_facade.hpp 326
G++:
In file included from /usr/include/boost/iterator/iterator_adaptor.hpp:15:0,
from Enumerate.h:18,
from Enumerate.cpp:1:
/usr/include/boost/iterator/iterator_facade.hpp: In static member function 'static boost::detail::operator_arrow_result<ValueType, Reference, Pointer>::type boost::detail::operator_arrow_result<ValueType, Reference, Pointer>::make(Reference) [with ValueType = Iterator::Enumerated<int, int>, Reference = Iterator::Enumerated<int, int&>, Pointer = Iterator::Enumerated<int, int>*, boost::detail::operator_arrow_result<ValueType, Reference, Pointer>::type = boost::detail::operator_arrow_proxy<Iterator::Enumerated<int, int> >]':
/usr/include/boost/iterator/iterator_facade.hpp:648:49: instantiated from 'boost::iterator_facade<I, V, TC, R, D>::pointer boost::iterator_facade<I, V, TC, R, D>::operator->() const [with Derived = Iterator::Enumerator<__gnu_cxx::__normal_iterator<int*, std::vector<int> >, int>, Value = Iterator::Enumerated<int, int>, CategoryOrTraversal = boost::random_access_traversal_tag, Reference = Iterator::Enumerated<int, int&>, Difference = int, boost::iterator_facade<I, V, TC, R, D>::pointer = boost::detail::operator_arrow_proxy<Iterator::Enumerated<int, int> >]'
Enumerate.cpp:27:14: instantiated from here
/usr/include/boost/iterator/iterator_facade.hpp:327:49: error: no matching function for call to 'implicit_cast(Iterator::Enumerated<int, int&>*)'
It seems you haven't specified what version of Boost you are using. I suppose you are hitting bug fixed a few months ago. Try with Boost trunk and the second program should compile. I haven't checked the first use case issue though. (FYI, There is no need to post in HTML to public mailing lists. If it wasn't in HTML, your code above would have been well formatted.) Best regards, -- Mateusz Loskot, http://mateusz.loskot.net