[Serialization] BOOST_CLASS_EXPORT_GUID related compile errors on Boost 1.35 with Visual Studio 2005
Dear List,
I am writing to request advice about a compile error possibly related
to the BOOST_CLASS_EXPORT_GUID macro under Boost 1.35 and Visual
Studio 2005. I unfortunately cannot share much about the cause of the
error and was hoping to query the community to see if anybody else has
had similar difficulties. In particular, it seems at least one other
developer has had a similar problem, as described in the blog post:
http://www.alexmccarthy.net/archives/2008/06/16/upgrading-to-boost-135
The problem in question involves a library we wrote that uses basic
features of Boost Serialization for marshaling objects to XML. The
library compiles and runs successfully on Linux (gcc version 4.2.3
Ubuntu 4.2.3-2ubuntu7). When compiling the same code on a
properly-configured Windows machine using Visual Studio 2005, we
observe the following compile errors:
C:\Boost\include\boost-1_35\boost/serialization/type_info_implementation.hpp(48)
: error C2027: use of undefined type
'boost::serialization::extended_type_info_impl<T>'
with
[
T=boost_time
]
C:\Boost\include\boost-1_35\boost/serialization/export.hpp(75)
: see reference to class template instantiation
'boost::serialization::type_info_implementation<T>' being compiled
with
[
T=boost_time
]
.\ConstraintSystem/Time/boost_time.h(159) : see reference to
class template instantiation
'boost::archive::detail::guid_initializer<T>' being compiled
with
[
T=boost_time
]
C:\Boost\include\boost-1_35\boost/serialization/type_info_implementation.hpp(49)
: error C2146: syntax error : missing ',' before identifier 'type'
C:\Boost\include\boost-1_35\boost/serialization/type_info_implementation.hpp(49)
: error C2065: 'type' : undeclared identifier
C:\Boost\include\boost-1_35\boost/serialization/type_info_implementation.hpp(50)
: error C3203: 'identity' : unspecialized class template can't be used
as a template argument for template parameter 'F2', expected a real
type
C:\Boost\include\boost-1_35\boost/serialization/type_info_implementation.hpp(50)
: error C2955: 'boost::mpl::identity' : use of class template requires
template argument list
C:\Boost\include\boost-1_35\boost/mpl/identity.hpp(26) : see
declaration of 'boost::mpl::identity'
.
.
.
(dozens of similar errors follow)
The owner of the aforementioned blog suggests to add the line:
#include
I believe that this has been addressed in 1.36. So I believe when(if) you move to 1.36, your "unofficial" patch will be replaced with the "official" one. Robert Ramey Paul Wais wrote:
Dear List,
I am writing to request advice about a compile error possibly related to the BOOST_CLASS_EXPORT_GUID macro under Boost 1.35 and Visual Studio 2005. I unfortunately cannot share much about the cause of the error and was hoping to query the community to see if anybody else has had similar difficulties. In particular, it seems at least one other developer has had a similar problem, as described in the blog post: http://www.alexmccarthy.net/archives/2008/06/16/upgrading-to-boost-135
The problem in question involves a library we wrote that uses basic features of Boost Serialization for marshaling objects to XML. The library compiles and runs successfully on Linux (gcc version 4.2.3 Ubuntu 4.2.3-2ubuntu7). When compiling the same code on a properly-configured Windows machine using Visual Studio 2005, we observe the following compile errors:
C:\Boost\include\boost-1_35\boost/serialization/type_info_implementation.hpp(48)
error C2027: use of undefined type 'boost::serialization::extended_type_info_impl<T>' with [ T=boost_time ] C:\Boost\include\boost-1_35\boost/serialization/export.hpp(75) see reference to class template instantiation 'boost::serialization::type_info_implementation<T>' being compiled with [ T=boost_time ] .\ConstraintSystem/Time/boost_time.h(159) : see reference to class template instantiation 'boost::archive::detail::guid_initializer<T>' being compiled with [ T=boost_time ] C:\Boost\include\boost-1_35\boost/serialization/type_info_implementation.hpp(49) error C2146: syntax error : missing ',' before identifier 'type' C:\Boost\include\boost-1_35\boost/serialization/type_info_implementation.hpp(49) error C2065: 'type' : undeclared identifier C:\Boost\include\boost-1_35\boost/serialization/type_info_implementation.hpp(50) error C3203: 'identity' : unspecialized class template can't be used as a template argument for template parameter 'F2', expected a real type C:\Boost\include\boost-1_35\boost/serialization/type_info_implementation.hpp(50) error C2955: 'boost::mpl::identity' : use of class template requires template argument list C:\Boost\include\boost-1_35\boost/mpl/identity.hpp(26) : see declaration of 'boost::mpl::identity'
. . .
(dozens of similar errors follow)
The owner of the aforementioned blog suggests to add the line: #include
to the file: boost/serialization/export.hpp.
We have done that and our compile errors go away. Though this fix seems to work for our needs, we endeavor to keep the copy of our Boost library free from unofficial patches.
Might anybody have similar troubles? Might there be an "official" fix to this problem?
Thank you for your time and I greatly appreciate any help on this issue.
Best Regards, -Paul Wais
participants (2)
-
Paul Wais
-
Robert Ramey