
On Tue, Apr 17, 2012 at 8:04 AM, Jens Auer <jensa@miltenyibiotec.de> wrote:
Thanks for all the suggestions, they are highly welcome. The output of the MS compiler with the error message is: 1>d:\programme\microsoft visual studio 10.0\vc\include\xutility(728): error C2665: 'std::_Debug_range2' : none of the 2 overloads could convert all the argument types 1> d:\programme\microsoft visual studio 10.0\vc\include\xutility(703): could be 'void std::_Debug_range2<_InIt>(_InIt,_InIt,std::_Dbfile_t,std::_Dbline_t,std::input_iterator_tag)' 1> with 1> [ 1> _InIt=Iterator::Enumerator<std::_Vector_iterator<std::_Vector_val<int,std::allocator<int>>>,int> 1> ] 1> d:\programme\microsoft visual studio 10.0\vc\include\xutility(711): or 'void std::_Debug_range2<_InIt>(_RanIt,_RanIt,std::_Dbfile_t,std::_Dbline_t,std::random_access_iterator_tag)' 1> with 1> [ 1> _InIt=Iterator::Enumerator<std::_Vector_iterator<std::_Vector_val<int,std::allocator<int>>>,int>, 1> _RanIt=Iterator::Enumerator<std::_Vector_iterator<std::_Vector_val<int,std::allocator<int>>>,int> 1> ] 1> while trying to match the argument list '(Iterator::Enumerator<Iterator,T>, Iterator::Enumerator<Iterator,T>, std::_Dbfile_t, std::_Dbline_t, boost::random_access_traversal_tag)' 1> with 1> [ 1> Iterator=std::_Vector_iterator<std::_Vector_val<int,std::allocator<int>>>, 1> T=int 1> ] 1> d:\programme\microsoft visual studio 10.0\vc\include\algorithm(30) : see reference to function template instantiation 'void std::_Debug_range<_InIt>(_InIt,_InIt,std::_Dbfile_t,std::_Dbline_t)' being compiled 1> with 1> [ 1> _InIt=Iterator::Enumerator<std::_Vector_iterator<std::_Vector_val<int,std::allocator<int>>>,int> 1> ] 1> c:\software development\svn\swdev\cap\mblib\iterator\enumerate.cpp(27) : see reference to function template instantiation '_Fn1 std::for_each<Iterator::Enumerator<Iterator,T>,`anonymous-namespace'::`anonymous-namespace'::<lambda0>>(_InIt,_InIt,_Fn1)' being compiled 1> with 1> [ 1> _Fn1=`anonymous-namespace'::`anonymous-namespace'::<lambda0>, 1> Iterator=std::_Vector_iterator<std::_Vector_val<int,std::allocator<int>>>, 1> T=int, 1> _InIt=Iterator::Enumerator<std::_Vector_iterator<std::_Vector_val<int,std::allocator<int>>>,int> 1> ]
If anybody is interested I can create a small solution with a project file to reproduce it.
Looks like boost::random_access_traversal_tag doesn't have a "best conversion" among std::input_iterator_tag std::random_access_iterator_tag My guess is this is where that proxy reference bites you, as it makes your Enumerator iterator not strictly a random access iterator, even though it morally is, so boost::iterator_facade won't set your iterator_category to std::random_access_iterator_tag and instead tries to go a middle-of-the-road approach (IIRC). Try typedef'ing typedef std::random_access_iterator_tag iterator_category; // I think this is right... in your Enumerator definition and see if MSVC complains? - Jeff