id,summary,reporter,owner,description,type,status,milestone,component,version,severity,resolution,keywords,cc 491,"range, VC 7.1, compile error.",sergey_shandar,Thorsten Ottosen,"{{{ Compiler: VC 7.1 Example: --------- #include template typename boost::range_iterator::type begin(const Container &X) { return 0; } int main() { char a[3]; int b = begin(a); return 0; } --------- The compile-time error message is --------- c:\Boost\include\boost-1_33\boost\range\iterator.hpp(37) : error C2825: 'C::iterator': cannot form a qualified name main.cpp(12) : see reference to class template instantiation 'boost::range_iterator' being compiled with [ C=char [3] ] --------- It's a VC 7.1 bug but there is possibility to work around. Instead of using C::iterator by default (existing code shown below): --------- namespace boost { namespace detail { template< typename C > struct range_iterator { typedef BOOST_DEDUCED_TYPENAME C::iterator type; }; } } --------- Use C::iterator only if C is a class. Code showing the possible implementation is shown below --------- namespace boost { namespace detail { template< typename C, bool IsClass> struct range_iterator { typedef void type; }; template< typename C> struct range_iterator { typedef BOOST_DEDUCED_TYPENAME C::iterator type; }; } } --------- }}}",Bugs,closed,,None,None,,None,,