Also, there's a problem with GCC >= 4.1 and the Serialization lib in Boost 1.35 that needs to be patched before FO will run without crashing. You need to apply the patch below. It might not apply cleanly, but it's very small and if it doesn't, it should be obvious how to fix it.
Code: Select all
Index: trunk/boost/serialization/export.hpp
===================================================================
--- trunk/boost/serialization/export.hpp (revision 43948)
+++ trunk/boost/serialization/export.hpp (revision 43949)
@@ -119,7 +119,7 @@
// generates the statically-initialized objects whose constructors
// register the information allowing serialization of T objects
// through pointers to their base classes.
- instantiate_ptr_serialization((T*)0, 0);
+ instantiate_ptr_serialization((T*)0, 0, adl_tag());
return *this;
}
const guid_initializer & export_guid(char const* key, mpl::true_){
Index: trunk/boost/archive/detail/register_archive.hpp
===================================================================
--- trunk/boost/archive/detail/register_archive.hpp (revision 43948)
+++ trunk/boost/archive/detail/register_archive.hpp (revision 43949)
@@ -6,6 +6,14 @@
namespace boost { namespace archive { namespace detail {
+// This is for the sake of GCC 4.1 et. al, which doesn't seem to see
+// the instantiate_ptr_serialization overloads generated by
+// BOOST_SERIALIZATION_REGISTER_ARCHIVE if they lexically follow the
+// call *unless* they are in an associated namespace of one of the
+// arguments. I am not 100% sure of what the standard says on this
+// point, and am investigating. - Dave A.
+struct adl_tag {};
+
template <class Archive, class Serializable>
struct ptr_serialization_support;
@@ -24,7 +32,7 @@
// in overload resolution with the functions declared by
// BOOST_SERIALIZATION_REGISTER_ARCHIVE, below.
template <class Serializable>
-void instantiate_ptr_serialization(Serializable*, int) {}
+void instantiate_ptr_serialization(Serializable*, int, adl_tag ) {}
// The function declaration generated by this macro never actually
// gets called, but its return type gets instantiated, and that's
@@ -36,7 +44,7 @@
\
template <class Serializable> \
typename _ptr_serialization_support<Archive, Serializable>::type \
-instantiate_ptr_serialization( Serializable*, Archive* ); \
+instantiate_ptr_serialization( Serializable*, Archive*, adl_tag ); \
\
}}}