[Signals2] Error on building project RELEASE

Hi, I'm writing a library that use the following: #include <boost/asio.hpp> #include <boost/asio/serial_port.hpp> #include <boost/thread.hpp> #include <boost/signals2/signal.hpp> #include <boost/scoped_ptr.hpp> #include <boost/enable_shared_from_this.hpp> I retrieved Signals2 from svn on 15/04/09. When I build it like STATIC DEBUG lib all works fine, but when I switch to STATIC RELEASE I got two errors... The preprocessor statements are: FOR RELEASE: WIN32;_LIB;_WINDOWS;EUROATLIB_EXPORTS;_WIN32_WINNT=0x0501 FOR DEBUG : WIN32;_DEBUG;_LIB;_WINDOWS;EUROATLIB_EXPORTS;_WIN32_WINNT=0x0501 What could be the problem? Tnx, Daniele. -------------------------------------------------------- ATDispatcher.cpp C:\Programmi\Microsoft Visual Studio 9.0\VC\include\xutility(419) : error C2664: 'boost::signals2::detail::stack_allocator<T,n_stack_elements>::stack_allocator(boost::signals2::detail::stack_storage<T,10> *)' : cannot convert parameter 1 from 'boost::signals2::detail::stack_allocator<T,n_stack_elements>' to 'boost::signals2::detail::stack_storage<T,n_stack_elements> *' with [ T=std::_Aux_cont, n_stack_elements=10 ] and [ T=boost::shared_ptr<void>, n_stack_elements=10 ] and [ T=std::_Aux_cont, n_stack_elements=10 ] No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called C:\Programmi\Microsoft Visual Studio 9.0\VC\include\xutility(417) : while compiling class template member function 'std::_Container_base_aux_alloc_real<_Alloc>::_Container_base_aux_alloc_real(_Alloc)' with [ _Alloc=boost::signals2::detail::stack_allocator<boost::shared_ptr<void>,10> ] C:\Programmi\Microsoft Visual Studio 9.0\VC\include\vector(421) : see reference to class template instantiation 'std::_Container_base_aux_alloc_real<_Alloc>' being compiled with [ _Alloc=boost::signals2::detail::stack_allocator<boost::shared_ptr<void>,10> ] C:\Programmi\Microsoft Visual Studio 9.0\VC\include\vector(439) : see reference to class template instantiation 'std::_Vector_val<_Ty,_Alloc>' being compiled with [ _Ty=boost::shared_ptr<void>, _Alloc=boost::signals2::detail::stack_allocator<boost::shared_ptr<void>,10> ] G:\lib\boost_signals2\boost/signals2/detail/stack_vector.hpp(28) : see reference to class template instantiation 'std::vector<_Ty,_Ax>' being compiled with [ _Ty=boost::shared_ptr<void>, _Ax=boost::signals2::detail::stack_allocator<boost::shared_ptr<void>,10> ] G:\lib\boost_signals2\boost/signals2/detail/slot_call_iterator.hpp(39) : see reference to class template instantiation 'boost::signals2::detail::stack_vector<T,NumStackElements>' being compiled with [ T=boost::shared_ptr<void>, NumStackElements=10 ] G:\lib\boost_signals2\boost/signals2/detail/slot_call_iterator.hpp(41) : see reference to class template instantiation 'boost::signals2::detail::slot_call_iterator_cache<ResultType,Function>' being compiled Serial.cpp C:\Programmi\Microsoft Visual Studio 9.0\VC\include\xutility(419) : error C2664: 'boost::signals2::detail::stack_allocator<T,n_stack_elements>::stack_allocator(boost::signals2::detail::stack_storage<T,10> *)' : cannot convert parameter 1 from 'boost::signals2::detail::stack_allocator<T,n_stack_elements>' to 'boost::signals2::detail::stack_storage<T,n_stack_elements> *' with [ T=std::_Aux_cont, n_stack_elements=10 ] and [ T=boost::shared_ptr<void>, n_stack_elements=10 ] and [ T=std::_Aux_cont, n_stack_elements=10 ] No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called C:\Programmi\Microsoft Visual Studio 9.0\VC\include\xutility(417) : while compiling class template member function 'std::_Container_base_aux_alloc_real<_Alloc>::_Container_base_aux_alloc_real(_Alloc)' with [ _Alloc=boost::signals2::detail::stack_allocator<boost::shared_ptr<void>,10> ] C:\Programmi\Microsoft Visual Studio 9.0\VC\include\vector(421) : see reference to class template instantiation 'std::_Container_base_aux_alloc_real<_Alloc>' being compiled with [ _Alloc=boost::signals2::detail::stack_allocator<boost::shared_ptr<void>,10> ] C:\Programmi\Microsoft Visual Studio 9.0\VC\include\vector(439) : see reference to class template instantiation 'std::_Vector_val<_Ty,_Alloc>' being compiled with [ _Ty=boost::shared_ptr<void>, _Alloc=boost::signals2::detail::stack_allocator<boost::shared_ptr<void>,10> ] G:\lib\boost_signals2\boost/signals2/detail/stack_vector.hpp(28) : see reference to class template instantiation 'std::vector<_Ty,_Ax>' being compiled with [ _Ty=boost::shared_ptr<void>, _Ax=boost::signals2::detail::stack_allocator<boost::shared_ptr<void>,10> ] G:\lib\boost_signals2\boost/signals2/detail/slot_call_iterator.hpp(39) : see reference to class template instantiation 'boost::signals2::detail::stack_vector<T,NumStackElements>' being compiled with [ T=boost::shared_ptr<void>, NumStackElements=10 ] G:\lib\boost_signals2\boost/signals2/detail/slot_call_iterator.hpp(41) : see reference to class template instantiation 'boost::signals2::detail::slot_call_iterator_cache<ResultType,Function>' being compiled LRRPTokenizer.cpp --------------------------------------------------------

On Monday 27 April 2009, Daniele Barzotti wrote:
I retrieved Signals2 from svn on 15/04/09.
When I build it like STATIC DEBUG lib all works fine, but when I switch to STATIC RELEASE I got two errors...
ATDispatcher.cpp C:\Programmi\Microsoft Visual Studio 9.0\VC\include\xutility(419) : error C2664: 'boost::signals2::detail::stack_allocator<T,n_stack_elements>::stack_all ocator(boost::signals2::detail::stack_storage<T,10> *)' : cannot convert parameter 1 from 'boost::signals2::detail::stack_allocator<T,n_stack_elements>' to 'boost::signals2::detail::stack_storage<T,n_stack_elements> *'
It seems msvc 9 in release mode with iterator checking turned on needs to be able to copy construct allocators from allocators with different template types. See for example: http://www.mail-archive.com/qpid-dev@incubator.apache.org/msg13891.html Would you try applying changeset 52627 from svn trunk and see if that fixes it? : https://svn.boost.org/trac/boost/changeset/52627/trunk

Frank Mori Hess ha scritto:
It seems msvc 9 in release mode with iterator checking turned on needs to be able to copy construct allocators from allocators with different template types. See for example:
http://www.mail-archive.com/qpid-dev@incubator.apache.org/msg13891.html
Would you try applying changeset 52627 from svn trunk and see if that fixes it? :
YEP, This change seems to work!!! Thanks a lot Frank! Cheers, Daniele

Frank Mori Hess ha scritto:
On Monday 27 April 2009, Daniele Barzotti wrote:
I retrieved Signals2 from svn on 15/04/09.
When I build it like STATIC DEBUG lib all works fine, but when I switch to STATIC RELEASE I got two errors...
It seems msvc 9 in release mode with iterator checking turned on needs to be able to copy construct allocators from allocators with different template types. See for example:
http://www.mail-archive.com/qpid-dev@incubator.apache.org/msg13891.html
Would you try applying changeset 52627 from svn trunk and see if that fixes it? :
Today I switched to boost 1_39 and while I'm very happy to see that Signals2 is been included, I've noted that this change is not... Maybe is this only a workaround for this msvc issue? Thanks, Daniele.

-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On Monday 04 May 2009, Daniele Barzotti wrote:
Today I switched to boost 1_39 and while I'm very happy to see that Signals2 is been included, I've noted that this change is not...
Maybe is this only a workaround for this msvc issue?
The fix for the msvc 9 "release mode with SECURE_SCL" compile bug will be included in the next release, it just came up a bit late for the 1.39 release. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux) iEYEARECAAYFAkn+8YgACgkQ5vihyNWuA4WenACghmZMtxYJniyNBeyuBpROz8bh rAoAnjUUjQ5uJFnI9FdXbnT6S/bpT8PR =DiOF -----END PGP SIGNATURE-----
participants (3)
-
Daniele Barzotti
-
Frank Mori Hess
-
Frank Mori Hess