boost_1_31_0 transform_iterator and VC71 ICE - FYI

I've begun converting my projects to using the new iterator_adaptor's. I've encountered an ICE with the code below. I've tried to isolate it to a simple console app but of course, the problem does not occur there. The following distillation does ICE, when compiled with the /Gm (Enable Minimal Rebuild) flag, but compiles and runs fine w/out it. This is an MFC multithreaded lib project NOT using precompiled headers. I'll continue to try to isolate the conditions.Any thoughts on how to isolate the problem? VC7.1 error message: C:\boost\boost_1_31_0\boost\mpl\aux_\preprocessed\plain\apply.hpp(50) : fatal error C1001: INTERNAL COMPILER ERROR (compiler file 'msc1.cpp', line 2701) #include <string> #include <algorithm> #include <vector> #include <numeric> #include <boost/bind.hpp> #include <boost/function.hpp> #include <boost/iterator/transform_iterator.hpp> typedef std::pair<int,int> CSize; CSize SizeFromString( const std::string& aString ){ return CSize(1,2); } CSize XUnionStacked ( const CSize& aSz1, const CSize& aSz2 ){ return CSize(1,2); } CSize XSizeMultiLine( const std::string& aString, const CSize& aSize ) { CSize lSize(0,0); boost::function1<CSize,const std::string& > lSizeFromStringFnc = boost::bind( SizeFromString, _1 ); boost::function2<CSize,const CSize&,const CSize& > lSizeUnionStackedFnc = boost::bind( XUnionStacked, _1, _2 ); std::vector<std::string> lStrings(10); lSize = std::accumulate ( boost::make_transform_iterator( lStrings.begin(), lSizeFromStringFnc ) , boost::make_transform_iterator( lStrings. end(), lSizeFromStringFnc ) , lSize , lSizeUnionStackedFnc ); return lSize; } Thanks, Jeff F

Jason Shirk of Microsoft says: This is a likely known issue in VC7.1, I'll have our team double check to make sure. IIRC, the only simple workaround is to not use /Gm. If it is the same issue, it has been fixed for the next release. -- Jason Shirk VC++ Compiler Team ---------- "Jeff Flinn" <TriumphSprint2000@hotmail.com> writes:
I've begun converting my projects to using the new iterator_adaptor's. I've encountered an ICE with the code below. I've tried to isolate it to a simple console app but of course, the problem does not occur there. The following distillation does ICE, when compiled with the /Gm (Enable Minimal Rebuild) flag, but compiles and runs fine w/out it. This is an MFC multithreaded lib project NOT using precompiled headers. I'll continue to try to isolate the conditions.Any thoughts on how to isolate the problem?
VC7.1 error message:
C:\boost\boost_1_31_0\boost\mpl\aux_\preprocessed\plain\apply.hpp(50) : fatal error C1001: INTERNAL COMPILER ERROR (compiler file 'msc1.cpp', line 2701)
#include <string> #include <algorithm> #include <vector> #include <numeric> #include <boost/bind.hpp> #include <boost/function.hpp> #include <boost/iterator/transform_iterator.hpp>
typedef std::pair<int,int> CSize;
CSize SizeFromString( const std::string& aString ){ return CSize(1,2); } CSize XUnionStacked ( const CSize& aSz1, const CSize& aSz2 ){ return CSize(1,2); }
CSize XSizeMultiLine( const std::string& aString, const CSize& aSize ) { CSize lSize(0,0);
boost::function1<CSize,const std::string& > lSizeFromStringFnc = boost::bind( SizeFromString, _1 ); boost::function2<CSize,const CSize&,const CSize& > lSizeUnionStackedFnc = boost::bind( XUnionStacked, _1, _2 );
std::vector<std::string> lStrings(10);
lSize = std::accumulate ( boost::make_transform_iterator( lStrings.begin(), lSizeFromStringFnc ) , boost::make_transform_iterator( lStrings. end(), lSizeFromStringFnc ) , lSize , lSizeUnionStackedFnc );
return lSize; }
Thanks,
Jeff F
-- Dave Abrahams Boost Consulting www.boost-consulting.com
participants (2)
-
David Abrahams
-
Jeff Flinn