[C++-sig] compile error in iterator

Kelly Burkhart kelly.burkhart at gmail.com
Wed Nov 29 14:31:28 CET 2006


More info: I have two windows machines both with MSVS.Net 2003.  The
one that doesn't work is a recent install with compiler version
13.10.6030.  My older machine has compiler version 13.10.3077.

Has anyone else noticed problems compiling boost python iterators with
recent MS compilers?

-K

On 11/27/06, Kelly Burkhart <kelly.burkhart at gmail.com> wrote:
> I have a GzipFile class which exposes a gzipped file as a python file.
>  I have written an iterator over this class which I use to iterate
> over an instance of this class.
>
> I'm using 1.33.1 and my code compiles cleanly and works on Linux g++
> 3.3.5.  I am now trying to build on Windows using msvc.net (cl
> 13.10.6030).  This compiler complains that
> bost::python::objects::iterator_range<NextPolicies,Iterator>::next is
> not accessible (full compiler complaint below).
>
> Does anyone have a solution, or hint to how I can go about fixing
> this?  Thank you in advance for any assistance.
>
> This code reproduces the problem:
>
> <begin>
> #include <boost/python.hpp>
> #include <boost/iterator/iterator_facade.hpp>
> #include <vector>
> #include <string>
>
> using namespace boost::python;
>
> //--------------------------------------------------------------------------------------------------
> //
> class ItTstIterator : public boost::iterator_facade< ItTstIterator,
>                                                      std::string,
>
> boost::forward_traversal_tag,
>                                                      std::string >
> {
> public:
>     ItTstIterator( std::vector<std::string>::iterator it ) : it_(it) {}
>     virtual ~ItTstIterator() {}
>
> private:
>     friend class boost::iterator_core_access;
>
>     void increment() { ++it_; }
>     bool equal( const ItTstIterator &it ) const { return it_ == it.it_; }
>     std::string dereference() const { return *it_; }
>
> private:
>     std::vector<std::string>::iterator it_;
> };
>
> //--------------------------------------------------------------------------------------------------
> class ItTst {
> public:
>     typedef ItTstIterator iterator;
>
>     ItTst() { vec_.push_back("one");vec_.push_back("two");vec_.push_back("three");
> }
>     ~ItTst() {}
>
>     // For iteration
>     ItTstIterator begin() { return ItTstIterator( vec_.begin() ); }
>     ItTstIterator end() { return ItTstIterator( vec_.end() ); }
>
> private:
>     std::vector< std::string > vec_;
> };
>
> void wrapPyIter()
> {
>     class_<ItTst>("ItTst", init<>() )
>         .def("__iter__", iterator<ItTst>())
>         ;
> }
> <end>
>
>
> And here is the full compiler complaint:
>
>         cl -c -nologo -GX -GR -Zc:forScope -wd4101 -wd4290 -wd4100 -wd4189
> -DWIN32 -Zi -Od -D_DEBUG -DFD_SETSIZE=512 -MDd -Zi -Od -D_DEBUG
> -DFD_SETSIZE=512 -MDd -DBOOST_SIGNALS_NAMESPACE=tb_signals -D__x86__
> -D__NT__ -D__OSVERSION__=5 -D__WIN32__ -GR -EHsc -W3 -w34100 -w34189
> -DWIN32 -DQT_LARGEFILE_SUPPORT -DCOMPILE_DL=1 -DQT_DLL -DQT_PLUGIN
> -DQT_QT3SUPPORT_LIB -DQT3_SUPPORT -DQT_XML_LIB -DQT_GUI_LIB
> -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT
> -D_WIN32_WINNT=0x0500 -DFD_SETSIZE=512 -DNOMINMAX
> -I"C:/Qt/4.2.1/include/QtCore" -I"C:/Qt/4.2.1/include/QtCore"
> -I"C:/Qt/4.2.1/include/QtNetwork" -I"C:/Qt/4.2.1/include/QtNetwork"
> -I"C:/Qt/4.2.1/include/QtGui" -I"C:/Qt/4.2.1/include/QtGui"
> -I"C:/Qt/4.2.1/include/QtXml" -I"C:/Qt/4.2.1/include/QtXml"
> -I"C:/Qt/4.2.1/include/Qt3Support" -I"C:/Qt/4.2.1/include/Qt3Support"
> -I"C:/Qt/4.2.1/include" -I"..\Common" -I"..\libtbut"
> -I"C:/Qt/4.2.1/include/ActiveQt" -I"moc" -I"..\libtbut" -I"ui"
> -I"C:/postgresql\src\interfaces\libpq" -I"C:/postgresql\src\include"
> -I"C:/Python25/include" -I"C:/Boost/include/boost-1_33_1"
> -I"c:\omni\omniORB-4.0.3\include"
> -I"c:\Qt\4.2.1\mkspecs\win32-msvc.net" -Fodebug\
> @c:\DOCUME~1\kelly\LOCALS~1\Temp\nm99.tmp
> wrap_py_iter.cpp
> C:/Boost\include\boost-1_33_1\boost\detail\compressed_pair.hpp(347) :
> error C2247: 'boost::python::objects::iterator_range<NextPolicies,Iterator>::next'
> not accessible because
> 'boost::details::compressed_pair_imp<T1,T2,Version>' uses 'private' to
> inherit from 'boost::python::objects::iterator_range<NextPolicies,Iterator>::next'
>         with
>         [
>             NextPolicies=boost::python::return_value_policy<boost::python::return_by_value>,
>             Iterator=iterator_const
>         ]
>         and
>         [
>             T1=boost::python::objects::iterator_range<boost::python::return_value_policy<boost::python::return_by_value>,iterator_const>::next,
>             T2=boost::python::return_value_policy<boost::python::return_by_value>,
>             Version=3
>         ]
>         and
>         [
>             NextPolicies=boost::python::return_value_policy<boost::python::return_by_value>,
>             Iterator=iterator_const
>         ]
>         C:/Boost\include\boost-1_33_1\boost\python\object\iterator.hpp(51)
> : see declaration of
> 'boost::python::objects::iterator_range<NextPolicies,Iterator>::next'
>         with
>         [
>             NextPolicies=boost::python::return_value_policy<boost::python::return_by_value>,
>             Iterator=iterator_const
>         ]
>         C:/Boost\include\boost-1_33_1\boost\python\object\iterator.hpp(51)
> : see declaration of
> 'boost::python::objects::iterator_range<NextPolicies,Iterator>::next'
>         with
>         [
>             NextPolicies=boost::python::return_value_policy<boost::python::return_by_value>,
>             Iterator=iterator_const
>         ]
>         C:/Boost\include\boost-1_33_1\boost\python\detail\caller.hpp(212)
> : see reference to class template instantiation
> 'boost::compressed_pair<T1,T2>' being compiled
>         with
>         [
>             T1=boost::python::objects::iterator_range<boost::python::return_value_policy<boost::python::return_by_value>,iterator_const>::next,
>             T2=boost::python::return_value_policy<boost::python::return_by_value>
>         ]
>         C:/Boost\include\boost-1_33_1\boost\python\detail\caller.hpp(145)
> : see reference to class template instantiation
> 'boost::python::detail::caller_arity<1>::impl<F,Policies,Sig>' being
> compiled
>         with
>         [
>             F=boost::python::objects::iterator_range<boost::python::return_value_policy<boost::python::return_by_value>,iterator_const>::next,
>             Policies=boost::python::return_value_policy<boost::python::return_by_value>,
>             Sig=boost::mpl::vector2<result_type,range_ &>
>         ]
>         C:/Boost\include\boost-1_33_1\boost\python\make_function.hpp(37)
> : see reference to class template instantiation
> 'boost::python::detail::caller<F,CallPolicies,Sig>' being compiled
>         with
>         [
>             F=boost::python::objects::iterator_range<boost::python::return_value_policy<boost::python::return_by_value>,iterator_const>::next,
>             CallPolicies=boost::python::return_value_policy<boost::python::return_by_value>,
>             Sig=boost::mpl::vector2<result_type,range_ &>
>         ]
>         C:/Boost\include\boost-1_33_1\boost\python\make_function.hpp(89)
> : see reference to function template instantiation
> 'boost::python::api::object
> boost::python::detail::make_function_aux<F,CallPolicies,Signature>(F,const
> CallPolicies &,const Sig &)' being compiled
>         with
>         [
>             F=boost::python::objects::iterator_range<boost::python::return_value_policy<boost::python::return_by_value>,iterator_const>::next,
>             CallPolicies=boost::python::return_value_policy<boost::python::return_by_value>,
>             Signature=boost::mpl::vector2<result_type,range_ &>,
>             Sig=boost::mpl::vector2<result_type,range_ &>
>         ]
>         C:/Boost\include\boost-1_33_1\boost\python\make_function.hpp(129)
> : see reference to function template instantiation
> 'boost::python::api::object
> boost::python::detail::make_function_dispatch<F,CallPolicies,KeywordsOrSignature>(F,const
> CallPolicies &,const Signature &,boost::mpl::false_)' being compiled
>         with
>         [
>             F=boost::python::objects::iterator_range<boost::python::return_value_policy<boost::python::return_by_value>,iterator_const>::next,
>             CallPolicies=boost::python::return_value_policy<boost::python::return_by_value>,
>             KeywordsOrSignature=boost::mpl::vector2<result_type,range_ &>,
>             Signature=boost::mpl::vector2<result_type,range_ &>
>         ]
>         C:/Boost\include\boost-1_33_1\boost\python\object\iterator.hpp(137)
> : see reference to function template instantiation
> 'boost::python::api::object
> boost::python::make_function<boost::python::objects::iterator_range<NextPolicies,Iterator>::next,NextPolicies,boost::mpl::vector2<T0,T1>>(F,const
> CallPolicies &,const KeywordsOrSignature &)' being compiled
>         with
>         [
>             NextPolicies=boost::python::return_value_policy<boost::python::return_by_value>,
>             Iterator=iterator_const,
>             T0=result_type,
>             T1=range_ &,
>             F=boost::python::objects::iterator_range<boost::python::return_value_policy<boost::python::return_by_value>,iterator_const>::next,
>             CallPolicies=boost::python::return_value_policy<boost::python::return_by_value>,
>             KeywordsOrSignature=boost::mpl::vector2<result_type,range_ &>
>         ]
>         C:/Boost\include\boost-1_33_1\boost\python\object\iterator.hpp(163)
> : see reference to function template instantiation
> 'boost::python::api::object
> boost::python::objects::detail::demand_iterator_class<Iterator,boost::python::return_value_policy<ResultConverterGenerator>>(const
> char *,Iterator *,const NextPolicies &)' being compiled
>         with
>         [
>             Iterator=const iterator_const,
>             ResultConverterGenerator=boost::python::return_by_value,
>             NextPolicies=boost::python::return_value_policy<boost::python::return_by_value>
>         ]
>         C:/Boost\include\boost-1_33_1\boost\python\object\iterator.hpp(161)
> : while compiling class-template member function
> 'boost::python::objects::iterator_range<NextPolicies,Iterator>
> boost::python::objects::detail::py_iter_<Target,Iterator,Accessor1,Accessor2,NextPolicies>::operator
> ()(boost::python::back_reference<T>) const'
>         with
>         [
>             NextPolicies=boost::python::return_value_policy<boost::python::return_by_value>,
>             Iterator=iterator_const,
>             Target=ItTst,
>             Accessor1=boost::_bi::protected_bind_t<boost::_bi::bind_t<boost::python::detail::iterators_impl<false>::apply<ItTst>::iterator,boost::python::detail::iterators_impl<false>::apply<ItTst>::iterator
> (__cdecl *)(ItTst
> &),boost::_bi::list1<boost::_bi::list_av_1<boost::arg<1>>::B1>>>,
>             Accessor2=boost::_bi::protected_bind_t<boost::_bi::bind_t<boost::python::detail::iterators_impl<false>::apply<ItTst>::iterator,boost::python::detail::iterators_impl<false>::apply<ItTst>::iterator
> (__cdecl *)(ItTst
> &),boost::_bi::list1<boost::_bi::list_av_1<boost::arg<1>>::B1>>>,
>             T=ItTst &
>         ]
>         C:/Boost\include\boost-1_33_1\boost\python\object\iterator.hpp(187)
> : see reference to class template instantiation
> 'boost::python::objects::detail::py_iter_<Target,Iterator,Accessor1,Accessor2,NextPolicies>'
> being compiled
>         with
>         [
>             Target=ItTst,
>             Iterator=iterator_const,
>             Accessor1=boost::_bi::protected_bind_t<boost::_bi::bind_t<boost::python::detail::iterators_impl<false>::apply<ItTst>::iterator,boost::python::detail::iterators_impl<false>::apply<ItTst>::iterator
> (__cdecl *)(ItTst
> &),boost::_bi::list1<boost::_bi::list_av_1<boost::arg<1>>::B1>>>,
>             Accessor2=boost::_bi::protected_bind_t<boost::_bi::bind_t<boost::python::detail::iterators_impl<false>::apply<ItTst>::iterator,boost::python::detail::iterators_impl<false>::apply<ItTst>::iterator
> (__cdecl *)(ItTst
> &),boost::_bi::list1<boost::_bi::list_av_1<boost::arg<1>>::B1>>>,
>             NextPolicies=boost::python::return_value_policy<boost::python::return_by_value>
>         ]
>         C:/Boost\include\boost-1_33_1\boost\python\object\iterator.hpp(239)
> : see reference to function template instantiation
> 'boost::python::api::object
> boost::python::objects::detail::make_iterator_function<Target,T,NextPolicies,Accessor1,Accessor2>(const
> Accessor1 &,const Accessor2 &,const NextPolicies &,Iterator &(__cdecl
> *)(void),boost::type<Target> *,int)' being compiled
>         with
>         [
>             Target=ItTst,
>             T=const iterator_const,
>             NextPolicies=boost::python::return_value_policy<boost::python::return_by_value>,
>             Accessor1=boost::_bi::protected_bind_t<boost::_bi::bind_t<boost::python::detail::iterators_impl<false>::apply<ItTst>::iterator,boost::python::detail::iterators_impl<false>::apply<ItTst>::iterator
> (__cdecl *)(ItTst
> &),boost::_bi::list1<boost::_bi::list_av_1<boost::arg<1>>::B1>>>,
>             Accessor2=boost::_bi::protected_bind_t<boost::_bi::bind_t<boost::python::detail::iterators_impl<false>::apply<ItTst>::iterator,boost::python::detail::iterators_impl<false>::apply<ItTst>::iterator
> (__cdecl *)(ItTst
> &),boost::_bi::list1<boost::_bi::list_av_1<boost::arg<1>>::B1>>>,
>             Iterator=const iterator_const
>         ]
>         C:/Boost\include\boost-1_33_1\boost\python\iterator.hpp(39) :
> see reference to function template instantiation
> 'boost::python::api::object
> boost::python::objects::make_iterator_function<Target,NextPolicies,boost::_bi::protected_bind_t<F>,boost::_bi::protected_bind_t<F>>(const
> Accessor1 &,const Accessor2 &,const NextPolicies &,boost::type<T> *)'
> being compiled
>         with
>         [
>             Target=ItTst,
>             NextPolicies=boost::python::return_value_policy<boost::python::return_by_value>,
>             F=boost::_bi::bind_t<boost::python::detail::iterators_impl<false>::apply<ItTst>::iterator,boost::python::detail::iterators_impl<false>::apply<ItTst>::iterator
> (__cdecl *)(ItTst
> &),boost::_bi::list1<boost::_bi::list_av_1<boost::arg<1>>::B1>>,
>             Accessor1=boost::_bi::protected_bind_t<boost::_bi::bind_t<boost::python::detail::iterators_impl<false>::apply<ItTst>::iterator,boost::python::detail::iterators_impl<false>::apply<ItTst>::iterator
> (__cdecl *)(ItTst
> &),boost::_bi::list1<boost::_bi::list_av_1<boost::arg<1>>::B1>>>,
>             Accessor2=boost::_bi::protected_bind_t<boost::_bi::bind_t<boost::python::detail::iterators_impl<false>::apply<ItTst>::iterator,boost::python::detail::iterators_impl<false>::apply<ItTst>::iterator
> (__cdecl *)(ItTst
> &),boost::_bi::list1<boost::_bi::list_av_1<boost::arg<1>>::B1>>>,
>             T=ItTst
>         ]
>         C:/Boost\include\boost-1_33_1\boost\python\iterator.hpp(96) :
> see reference to function template instantiation
> 'boost::python::api::object
> boost::python::detail::make_iterator<T,boost::python::detail::iterators_impl<const_>::apply<T>::iterator(__cdecl
> *)(T &),boost::python::detail::iterators_impl<const_>::apply<T>::iterator(__cdecl
> *)(T &),boost::python::return_value_policy<ResultConverterGenerator>>(Accessor1,Accessor2,NextPolicies,Target
> &(__cdecl *)(void))' being compiled
>         with
>         [
>             T=ItTst,
>             const_=false,
>             ResultConverterGenerator=boost::python::return_by_value,
>             Accessor1=boost::python::detail::iterators_impl<false>::apply<ItTst>::iterator
> (__cdecl *)(ItTst &),
>             Accessor2=boost::python::detail::iterators_impl<false>::apply<ItTst>::iterator
> (__cdecl *)(ItTst &),
>             NextPolicies=boost::python::return_value_policy<boost::python::return_by_value>,
>             Target=ItTst
>         ]
>         C:/Boost\include\boost-1_33_1\boost\python\iterator.hpp(120) :
> see reference to function template instantiation
> 'boost::python::api::object
> boost::python::range<NextPolicies,boost::python::detail::iterators_impl<const_>::apply<T>::iterator(__cdecl
> *)(T &),boost::python::detail::iterators_impl<const_>::apply<T>::iterator(__cdecl
> *)(T &)>(Accessor1,Accessor2,NextPolicies *)' being compiled
>         with
>         [
>             NextPolicies=boost::python::objects::default_iterator_call_policies,
>             const_=false,
>             T=ItTst,
>             Accessor1=boost::python::detail::iterators_impl<false>::apply<ItTst>::iterator
> (__cdecl *)(ItTst &),
>             Accessor2=boost::python::detail::iterators_impl<false>::apply<ItTst>::iterator
> (__cdecl *)(ItTst &)
>         ]
>         C:/Boost\include\boost-1_33_1\boost\python\iterator.hpp(116) :
> while compiling class-template member function
> 'boost::python::iterator<Container>::iterator(void)'
>         with
>         [
>             Container=ItTst
>         ]
>         wrap_py_iter.cpp(48) : see reference to class template
> instantiation 'boost::python::iterator<Container>' being compiled
>         with
>         [
>             Container=ItTst
>         ]
> NMAKE : fatal error U1077: 'cl' : return code '0x2'
> Stop.
> NMAKE : fatal error U1077: '"c:\Program Files\Microsoft Visual Studio
> .NET 2003\VC7\BIN\nmake.exe"' : return code '0x2'
> Stop.
>



More information about the Cplusplus-sig mailing list