Prombles compiling 1.33 RC1 with Intel C++ 8.1 on Windows XP
BlankI'm having problems compiling signals library 1.33 RC1 with Intel C++
8.1. Looks like it only happens when building dll version of signals
library. Eveything else compiles fine. It also compiles with VC7.1.
I have set the following environment variables:
set TOOLS=intel-win32-8_1
set INTEL_BASE_MSVC_TOOLSET=vc-7_1
set INTEL_PATH="c:\Program Files\Intel\CPP\Compiler80\Ia32"
set INTEL_VERSION=8.1
The command line I use is bjam "--builddir=D:\Boost_Build\1_33_0" stage.
The intel compiler version is: W_CC_PC_8.1.030
I got error messages like the following:
vc-C++
D:\Boost_Build\1_33_0\bin\boost\libs\signals\build\boost_signals.dll\intel-win32-8_1\debug\threading-multi\named_slot_map.obj
named_slot_map.cpp
C:\Program Files\boost_1_33_0\boost/iterator/iterator_facade.hpp(529):
error: class "boost::signals::detail::named_slot_map_iterator" has no member
"decrement"
f.decrement();
^
detected during:
instantiation of "void
boost::iterator_core_access::decrement(Facade &) [with
Facade=boost::signals::detail::named_slot_map_iterator]" at line 682
instantiation of "Derived &boost::iterator_facade
On Aug 3, 2005, at 11:02 AM, Sean Huang wrote:
BlankI'm having problems compiling signals library 1.33 RC1 with Intel C++ 8.1. Looks like it only happens when building dll version of signals library. Eveything else compiles fine. It also compiles with VC7.1.
I have set the following environment variables:
set TOOLS=intel-win32-8_1 set INTEL_BASE_MSVC_TOOLSET=vc-7_1 set INTEL_PATH="c:\Program Files\Intel\CPP\Compiler80\Ia32" set INTEL_VERSION=8.1
The command line I use is bjam "--builddir=D:\Boost_Build\1_33_0" stage.
The intel compiler version is: W_CC_PC_8.1.030
I got error messages like the following: C:\Program Files\boost_1_33_0\boost/iterator/iterator_facade.hpp(529): error: class "boost::signals::detail::named_slot_map_iterator" has no member "decrement" f.decrement();
It appears that the Intel compiler is emulating VC++ 7.1's bugs a bit too well. If you remove the #if BOOST_WORKAROUND from named_slot_map.hpp and named_slot_map.cpp (so that "decrement" and "advance" get defined), it should work. Doug
Doug,
Thanks for the help. Will this get fixed in 1.33 release? Also, I do not
quite understand the following:
#if BOOST_WORKAROUND(BOOST_MSVC, <= 0x1701)
void named_slot_map_iterator::decrement() { assert(false); }
void named_slot_map_iterator::advance(difference_type) { assert(false); }
#endif
As far as I know, the highest BOOST_MSVC is 1400 for VC8.0. Am I missing
something?
Best regards,
Sean
"Douglas Gregor"
I got error messages like the following: C:\Program Files\boost_1_33_0\boost/iterator/iterator_facade.hpp(529): error: class "boost::signals::detail::named_slot_map_iterator" has no member "decrement" f.decrement();
It appears that the Intel compiler is emulating VC++ 7.1's bugs a bit too well. If you remove the #if BOOST_WORKAROUND from named_slot_map.hpp and named_slot_map.cpp (so that "decrement" and "advance" get defined), it should work.
Doug
Douglas Gregor wrote:
It appears that the Intel compiler is emulating VC++ 7.1's bugs a bit too well. If you remove the #if BOOST_WORKAROUND from named_slot_map.hpp and named_slot_map.cpp (so that "decrement" and "advance" get defined), it should work.
Maybe it would have been better to replace #if BOOST_WORKAROUND(BOOST_MSVC, ... by #if BOOST_WORKAROUND(_MSC_VER, ... which is equally defined for Intel and VC. Stefan
On Aug 4, 2005, at 9:29 AM, Stefan Slapeta wrote:
Douglas Gregor wrote:
It appears that the Intel compiler is emulating VC++ 7.1's bugs a bit too well. If you remove the #if BOOST_WORKAROUND from named_slot_map.hpp and named_slot_map.cpp (so that "decrement" and "advance" get defined), it should work.
Maybe it would have been better to replace
#if BOOST_WORKAROUND(BOOST_MSVC, ...
by
#if BOOST_WORKAROUND(_MSC_VER, ...
which is equally defined for Intel and VC.
Yep, you're right. Doug
Douglas Gregor
On Aug 4, 2005, at 9:29 AM, Stefan Slapeta wrote:
Douglas Gregor wrote:
It appears that the Intel compiler is emulating VC++ 7.1's bugs a bit too well. If you remove the #if BOOST_WORKAROUND from named_slot_map.hpp and named_slot_map.cpp (so that "decrement" and "advance" get defined), it should work.
Maybe it would have been better to replace
#if BOOST_WORKAROUND(BOOST_MSVC, ...
by
#if BOOST_WORKAROUND(_MSC_VER, ...
which is equally defined for Intel and VC.
Yep, you're right.
I think it would be wiser to stick with BOOST_WORKAROUND(BOOST_MSVC, ... ) || BOOST_WORKAROUND(BOOST_INTEL_XXXX, ... ) Because other compilers that do not emulate bugs so well are probably also defining that symbol. -- Dave Abrahams Boost Consulting www.boost-consulting.com
On Aug 4, 2005, at 7:43 PM, David Abrahams wrote:
I think it would be wiser to stick with
BOOST_WORKAROUND(BOOST_MSVC, ... ) || BOOST_WORKAROUND(BOOST_INTEL_XXXX, ... )
Because other compilers that do not emulate bugs so well are probably also defining that symbol.
In this case, the particular symbols that are defined by the workaround are totally harmless. Doug
Actually, this problem only appears when BOOST_SIGNALS_DECL is defined as
__declspec(dllexport). I am not sure if this issue is only limited to
Microsoft and Intel compiler since some other compilers on Windows support
__declspec too. This is just a guess since I do not have access to these
other compiler.
Sean
"Stefan Slapeta"
Douglas Gregor wrote:
It appears that the Intel compiler is emulating VC++ 7.1's bugs a bit too well. If you remove the #if BOOST_WORKAROUND from named_slot_map.hpp and named_slot_map.cpp (so that "decrement" and "advance" get defined), it should work.
Maybe it would have been better to replace
#if BOOST_WORKAROUND(BOOST_MSVC, ...
by
#if BOOST_WORKAROUND(_MSC_VER, ...
which is equally defined for Intel and VC.
Stefan
participants (4)
-
David Abrahams
-
Douglas Gregor
-
Sean Huang
-
Stefan Slapeta