From 61b81fad465cdb5037e237240896e8b86d85eebc Mon Sep 17 00:00:00 2001 From: Robert Ramey Date: Thu, 2 Apr 2015 13:02:33 -0700 Subject: [PATCH] many small adjustments to get visibility working correctly on GCC and Clang. Tested pretty extensively in release/debug shared/linked. I don't have MSVC on me - so I'll have to upload without testing this. One pending issue is that test_utf8_codecvt fails. I'm guessing that the copy in detail needs to be tweaked. I'll get this fixed up separately. --- CMake/CMakeLists.txt | 2 -- build/Jamfile.v2 | 6 ++++++ include/boost/archive/archive_exception.hpp | 19 +++++++++---------- include/boost/archive/basic_archive.hpp | 4 ++-- .../boost/archive/basic_binary_iarchive.hpp | 2 +- .../boost/archive/basic_binary_iprimitive.hpp | 3 +-- .../boost/archive/basic_binary_oarchive.hpp | 4 ++-- .../boost/archive/basic_binary_oprimitive.hpp | 2 +- include/boost/archive/basic_text_iarchive.hpp | 2 +- .../boost/archive/basic_text_iprimitive.hpp | 2 +- include/boost/archive/basic_text_oarchive.hpp | 2 +- .../boost/archive/basic_text_oprimitive.hpp | 2 +- include/boost/archive/basic_xml_iarchive.hpp | 2 +- include/boost/archive/basic_xml_oarchive.hpp | 2 +- include/boost/archive/binary_iarchive.hpp | 2 +- include/boost/archive/binary_oarchive.hpp | 2 +- .../archive/detail/archive_serializer_map.hpp | 3 +-- .../boost/archive/detail/basic_iarchive.hpp | 6 +++--- .../archive/detail/basic_iserializer.hpp | 6 +++--- .../boost/archive/detail/basic_oarchive.hpp | 6 +++--- .../archive/detail/basic_oserializer.hpp | 6 +++--- .../detail/basic_pointer_iserializer.hpp | 6 +++--- .../detail/basic_pointer_oserializer.hpp | 6 +++--- .../archive/detail/basic_serializer_map.hpp | 2 +- .../archive/impl/basic_binary_iarchive.ipp | 2 +- .../boost/archive/polymorphic_iarchive.hpp | 4 ++-- .../boost/archive/polymorphic_oarchive.hpp | 4 ++-- include/boost/archive/text_iarchive.hpp | 4 ++-- include/boost/archive/text_oarchive.hpp | 4 ++-- include/boost/archive/text_wiarchive.hpp | 4 ++-- include/boost/archive/text_woarchive.hpp | 4 ++-- .../boost/archive/xml_archive_exception.hpp | 2 +- include/boost/archive/xml_iarchive.hpp | 4 ++-- include/boost/archive/xml_oarchive.hpp | 4 ++-- include/boost/archive/xml_wiarchive.hpp | 4 ++-- include/boost/archive/xml_woarchive.hpp | 4 ++-- .../serialization/extended_type_info.hpp | 2 +- .../extended_type_info_no_rtti.hpp | 2 +- .../extended_type_info_typeid.hpp | 2 +- include/boost/serialization/void_cast.hpp | 10 +++++----- src/basic_archive.cpp | 4 ++-- src/basic_xml_archive.cpp | 16 ++++++++-------- src/void_cast.cpp | 15 +++++++++++++++ 43 files changed, 105 insertions(+), 89 deletions(-) diff --git a/CMake/CMakeLists.txt b/CMake/CMakeLists.txt index 3a252dde..8a02d38b 100644 --- a/CMake/CMakeLists.txt +++ b/CMake/CMakeLists.txt @@ -143,8 +143,6 @@ add_library(serialization ../src/stl_port.cpp ../src/text_iarchive.cpp ../src/text_oarchive.cpp - ../src/text_wiarchive.cpp - ../src/text_woarchive.cpp ../src/utf8_codecvt_facet.cpp ../src/void_cast.cpp ../src/xml_archive_exception.cpp diff --git a/build/Jamfile.v2 b/build/Jamfile.v2 index f1b18170..69e62a1c 100644 --- a/build/Jamfile.v2 +++ b/build/Jamfile.v2 @@ -101,6 +101,9 @@ lib boost_serialization msvc:/Gy msvc:_SCL_SECURE_NO_WARNINGS gcc:"-fvisibility=hidden" + gcc:"-fvisibility-inlines-hidden" + darwin:"-fvisibility=hidden" + darwin:"-fvisibility-inlines-hidden" shared:BOOST_SERIALIZATION_DYN_LINK=1 ; @@ -110,6 +113,9 @@ lib boost_wserialization msvc:/Gy msvc:_SCL_SECURE_NO_WARNINGS gcc:"-fvisibility=hidden" + gcc:"-fvisibility-inlines-hidden" + darwin:"-fvisibility=hidden" + darwin:"-fvisibility-inlines-hidden" shared:BOOST_SERIALIZATION_DYN_LINK=1 ; diff --git a/include/boost/archive/archive_exception.hpp b/include/boost/archive/archive_exception.hpp index 1a9796a6..5761c0e1 100644 --- a/include/boost/archive/archive_exception.hpp +++ b/include/boost/archive/archive_exception.hpp @@ -39,11 +39,14 @@ namespace archive { ////////////////////////////////////////////////////////////////////// // exceptions thrown by archives // -class BOOST_ARCHIVE_DECL archive_exception : +class BOOST_SYMBOL_VISIBLE archive_exception : public virtual std::exception { -protected: char m_buffer[128]; +protected: + unsigned int + BOOST_ARCHIVE_DECL append(unsigned int l, const char * a); + BOOST_ARCHIVE_DECL archive_exception() BOOST_NOEXCEPT; public: typedef enum { no_exception, // initialized without code @@ -75,19 +78,15 @@ public: // type has been instantiated in more than one module. output_stream_error // error on input stream } exception_code; -public: + exception_code code; - archive_exception( + BOOST_ARCHIVE_DECL archive_exception( exception_code c, const char * e1 = NULL, const char * e2 = NULL ) BOOST_NOEXCEPT; - virtual ~archive_exception() BOOST_NOEXCEPT_OR_NOTHROW ; - virtual const char *what() const BOOST_NOEXCEPT_OR_NOTHROW ; -protected: - unsigned int - append(unsigned int l, const char * a); - archive_exception() BOOST_NOEXCEPT; + virtual BOOST_ARCHIVE_DECL ~archive_exception() BOOST_NOEXCEPT_OR_NOTHROW ; + virtual const char * BOOST_ARCHIVE_DECL what() const BOOST_NOEXCEPT_OR_NOTHROW ; }; }// namespace archive diff --git a/include/boost/archive/basic_archive.hpp b/include/boost/archive/basic_archive.hpp index ce7ac99a..65d5c274 100644 --- a/include/boost/archive/basic_archive.hpp +++ b/include/boost/archive/basic_archive.hpp @@ -69,7 +69,7 @@ public: } }; -BOOST_ARCHIVE_DECL library_version_type +library_version_type BOOST_ARCHIVE_VERSION(); class version_type { @@ -242,7 +242,7 @@ enum archive_flags { flags_last = 8 }; -BOOST_ARCHIVE_DECL const char * +const char * BOOST_ARCHIVE_SIGNATURE(); /* NOTE : Warning : Warning : Warning : Warning : Warning diff --git a/include/boost/archive/basic_binary_iarchive.hpp b/include/boost/archive/basic_binary_iarchive.hpp index 997c8b61..c0cc655c 100644 --- a/include/boost/archive/basic_binary_iarchive.hpp +++ b/include/boost/archive/basic_binary_iarchive.hpp @@ -50,7 +50,7 @@ namespace detail { ///////////////////////////////////////////////////////////////////////// // class basic_binary_iarchive - read serialized objects from a input binary stream template -class basic_binary_iarchive : +class BOOST_SYMBOL_VISIBLE basic_binary_iarchive : public detail::common_iarchive { #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS diff --git a/include/boost/archive/basic_binary_iprimitive.hpp b/include/boost/archive/basic_binary_iprimitive.hpp index 1b92a6c3..5e826310 100644 --- a/include/boost/archive/basic_binary_iprimitive.hpp +++ b/include/boost/archive/basic_binary_iprimitive.hpp @@ -67,8 +67,7 @@ class codecvt_null; ///////////////////////////////////////////////////////////////////////////// // class binary_iarchive - read serialized objects from a input binary stream template -class basic_binary_iprimitive -{ +class BOOST_SYMBOL_VISIBLE basic_binary_iprimitive { #ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS friend class load_access; protected: diff --git a/include/boost/archive/basic_binary_oarchive.hpp b/include/boost/archive/basic_binary_oarchive.hpp index 1e661e91..f05f2f86 100644 --- a/include/boost/archive/basic_binary_oarchive.hpp +++ b/include/boost/archive/basic_binary_oarchive.hpp @@ -58,8 +58,8 @@ namespace detail { // does have the virtue of buiding the smalles archive in the minimum amount // of time. So under some circumstances it may be he right choice. template -class basic_binary_oarchive : - public archive::detail::common_oarchive +class BOOST_SYMBOL_VISIBLE basic_binary_oarchive : + public detail::common_oarchive { #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS public: diff --git a/include/boost/archive/basic_binary_oprimitive.hpp b/include/boost/archive/basic_binary_oprimitive.hpp index f6a1bdfe..077d705e 100644 --- a/include/boost/archive/basic_binary_oprimitive.hpp +++ b/include/boost/archive/basic_binary_oprimitive.hpp @@ -61,7 +61,7 @@ class codecvt_null; // class basic_binary_oprimitive - binary output of prmitives template -class basic_binary_oprimitive { +class BOOST_SYMBOL_VISIBLE basic_binary_oprimitive { #ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS friend class save_access; protected: diff --git a/include/boost/archive/basic_text_iarchive.hpp b/include/boost/archive/basic_text_iarchive.hpp index 98f9c155..583041d8 100644 --- a/include/boost/archive/basic_text_iarchive.hpp +++ b/include/boost/archive/basic_text_iarchive.hpp @@ -46,7 +46,7 @@ namespace detail { ///////////////////////////////////////////////////////////////////////// // class basic_text_iarchive - read serialized objects from a input text stream template -class basic_text_iarchive : +class BOOST_SYMBOL_VISIBLE basic_text_iarchive : public detail::common_iarchive { #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS diff --git a/include/boost/archive/basic_text_iprimitive.hpp b/include/boost/archive/basic_text_iprimitive.hpp index 2df8c546..08da95c3 100644 --- a/include/boost/archive/basic_text_iprimitive.hpp +++ b/include/boost/archive/basic_text_iprimitive.hpp @@ -64,7 +64,7 @@ namespace archive { #endif template -class basic_text_iprimitive { +class BOOST_SYMBOL_VISIBLE basic_text_iprimitive { protected: IStream &is; io::ios_flags_saver flags_saver; diff --git a/include/boost/archive/basic_text_oarchive.hpp b/include/boost/archive/basic_text_oarchive.hpp index 38bf41c5..6f7f8fb1 100644 --- a/include/boost/archive/basic_text_oarchive.hpp +++ b/include/boost/archive/basic_text_oarchive.hpp @@ -46,7 +46,7 @@ namespace detail { ///////////////////////////////////////////////////////////////////////// // class basic_text_oarchive template -class basic_text_oarchive : +class BOOST_SYMBOL_VISIBLE basic_text_oarchive : public detail::common_oarchive { #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS diff --git a/include/boost/archive/basic_text_oprimitive.hpp b/include/boost/archive/basic_text_oprimitive.hpp index 07d30cfb..86330921 100644 --- a/include/boost/archive/basic_text_oprimitive.hpp +++ b/include/boost/archive/basic_text_oprimitive.hpp @@ -64,7 +64,7 @@ namespace archive { ///////////////////////////////////////////////////////////////////////// // class basic_text_oprimitive - output of prmitives to stream template -class basic_text_oprimitive +class BOOST_SYMBOL_VISIBLE basic_text_oprimitive { protected: OStream &os; diff --git a/include/boost/archive/basic_xml_iarchive.hpp b/include/boost/archive/basic_xml_iarchive.hpp index 70cebc99..152d0238 100644 --- a/include/boost/archive/basic_xml_iarchive.hpp +++ b/include/boost/archive/basic_xml_iarchive.hpp @@ -43,7 +43,7 @@ namespace detail { ///////////////////////////////////////////////////////////////////////// // class xml_iarchive - read serialized objects from a input text stream template -class basic_xml_iarchive : +class BOOST_SYMBOL_VISIBLE basic_xml_iarchive : public detail::common_iarchive { #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS diff --git a/include/boost/archive/basic_xml_oarchive.hpp b/include/boost/archive/basic_xml_oarchive.hpp index 45fe3827..4970772e 100644 --- a/include/boost/archive/basic_xml_oarchive.hpp +++ b/include/boost/archive/basic_xml_oarchive.hpp @@ -44,7 +44,7 @@ namespace detail { ////////////////////////////////////////////////////////////////////// // class basic_xml_oarchive - write serialized objects to a xml output stream template -class basic_xml_oarchive : +class BOOST_SYMBOL_VISIBLE basic_xml_oarchive : public detail::common_oarchive { #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS diff --git a/include/boost/archive/binary_iarchive.hpp b/include/boost/archive/binary_iarchive.hpp index ce67ccab..785ce761 100644 --- a/include/boost/archive/binary_iarchive.hpp +++ b/include/boost/archive/binary_iarchive.hpp @@ -31,7 +31,7 @@ namespace archive { // do not derive from this class. If you want to extend this functionality // via inhertance, derived from binary_iarchive_impl instead. This will // preserve correct static polymorphism. -class binary_iarchive : +class BOOST_SYMBOL_VISIBLE binary_iarchive : public binary_iarchive_impl< boost::archive::binary_iarchive, std::istream::char_type, diff --git a/include/boost/archive/binary_oarchive.hpp b/include/boost/archive/binary_oarchive.hpp index 89a86da4..e8313fd7 100644 --- a/include/boost/archive/binary_oarchive.hpp +++ b/include/boost/archive/binary_oarchive.hpp @@ -32,7 +32,7 @@ namespace archive { // do not derive from this class. If you want to extend this functionality // via inhertance, derived from binary_oarchive_impl instead. This will // preserve correct static polymorphism. -class binary_oarchive : +class BOOST_SYMBOL_VISIBLE binary_oarchive : public binary_oarchive_impl< binary_oarchive, std::ostream::char_type, std::ostream::traits_type > diff --git a/include/boost/archive/detail/archive_serializer_map.hpp b/include/boost/archive/detail/archive_serializer_map.hpp index 8f355293..6c1ae591 100644 --- a/include/boost/archive/detail/archive_serializer_map.hpp +++ b/include/boost/archive/detail/archive_serializer_map.hpp @@ -36,8 +36,7 @@ namespace detail { class basic_serializer; template -class BOOST_ARCHIVE_OR_WARCHIVE_DECL -archive_serializer_map { +class BOOST_SYMBOL_VISIBLE archive_serializer_map { public: static bool insert(const basic_serializer * bs); static void erase(const basic_serializer * bs); diff --git a/include/boost/archive/detail/basic_iarchive.hpp b/include/boost/archive/detail/basic_iarchive.hpp index 24732a72..acba9812 100644 --- a/include/boost/archive/detail/basic_iarchive.hpp +++ b/include/boost/archive/detail/basic_iarchive.hpp @@ -37,11 +37,11 @@ namespace archive { namespace detail { class basic_iarchive_impl; -class BOOST_ARCHIVE_DECL basic_iserializer; -class BOOST_ARCHIVE_DECL basic_pointer_iserializer; +class BOOST_SYMBOL_VISIBLE basic_iserializer; +class BOOST_SYMBOL_VISIBLE basic_pointer_iserializer; ////////////////////////////////////////////////////////////////////// // class basic_iarchive - read serialized objects from a input stream -class BOOST_ARCHIVE_DECL basic_iarchive : +class BOOST_SYMBOL_VISIBLE basic_iarchive : private boost::noncopyable, public boost::archive::detail::helper_collection { diff --git a/include/boost/archive/detail/basic_iserializer.hpp b/include/boost/archive/detail/basic_iserializer.hpp index 5f873cde..ad86b7f5 100644 --- a/include/boost/archive/detail/basic_iserializer.hpp +++ b/include/boost/archive/detail/basic_iserializer.hpp @@ -39,10 +39,10 @@ namespace serialization { namespace archive { namespace detail { -class BOOST_ARCHIVE_DECL basic_iarchive; -class BOOST_ARCHIVE_DECL basic_pointer_iserializer; +class basic_iarchive; +class basic_pointer_iserializer; -class BOOST_ARCHIVE_DECL basic_iserializer : +class BOOST_SYMBOL_VISIBLE basic_iserializer : public basic_serializer { private: diff --git a/include/boost/archive/detail/basic_oarchive.hpp b/include/boost/archive/detail/basic_oarchive.hpp index 83c9a3cc..e0285f3e 100644 --- a/include/boost/archive/detail/basic_oarchive.hpp +++ b/include/boost/archive/detail/basic_oarchive.hpp @@ -35,12 +35,12 @@ namespace archive { namespace detail { class basic_oarchive_impl; -class BOOST_ARCHIVE_DECL basic_oserializer; -class BOOST_ARCHIVE_DECL basic_pointer_oserializer; +class BOOST_SYMBOL_VISIBLE basic_oserializer; +class BOOST_SYMBOL_VISIBLE basic_pointer_oserializer; ////////////////////////////////////////////////////////////////////// // class basic_oarchive - write serialized objects to an output stream -class BOOST_ARCHIVE_OR_WARCHIVE_DECL basic_oarchive : +class BOOST_SYMBOL_VISIBLE basic_oarchive : private boost::noncopyable, public boost::archive::detail::helper_collection { diff --git a/include/boost/archive/detail/basic_oserializer.hpp b/include/boost/archive/detail/basic_oserializer.hpp index 0d501201..8df913b5 100644 --- a/include/boost/archive/detail/basic_oserializer.hpp +++ b/include/boost/archive/detail/basic_oserializer.hpp @@ -40,10 +40,10 @@ namespace serialization { namespace archive { namespace detail { -class BOOST_ARCHIVE_DECL basic_oarchive; -class BOOST_ARCHIVE_DECL basic_pointer_oserializer; +class basic_oarchive; +class basic_pointer_oserializer; -class BOOST_ARCHIVE_DECL basic_oserializer : +class BOOST_SYMBOL_VISIBLE basic_oserializer : public basic_serializer { private: diff --git a/include/boost/archive/detail/basic_pointer_iserializer.hpp b/include/boost/archive/detail/basic_pointer_iserializer.hpp index 9a6dd499..726b7c59 100644 --- a/include/boost/archive/detail/basic_pointer_iserializer.hpp +++ b/include/boost/archive/detail/basic_pointer_iserializer.hpp @@ -37,10 +37,10 @@ namespace serialization { namespace archive { namespace detail { -class BOOST_ARCHIVE_DECL basic_iarchive; -class BOOST_ARCHIVE_DECL basic_iserializer; +class basic_iarchive; +class basic_iserializer; -class BOOST_ARCHIVE_DECL basic_pointer_iserializer +class BOOST_SYMBOL_VISIBLE basic_pointer_iserializer : public basic_serializer { protected: explicit basic_pointer_iserializer( diff --git a/include/boost/archive/detail/basic_pointer_oserializer.hpp b/include/boost/archive/detail/basic_pointer_oserializer.hpp index de12bb0a..cd4605f3 100644 --- a/include/boost/archive/detail/basic_pointer_oserializer.hpp +++ b/include/boost/archive/detail/basic_pointer_oserializer.hpp @@ -36,10 +36,10 @@ namespace serialization { namespace archive { namespace detail { -class BOOST_ARCHIVE_DECL basic_oarchive; -class BOOST_ARCHIVE_DECL basic_oserializer; +class basic_oarchive; +class basic_oserializer; -class BOOST_ARCHIVE_DECL basic_pointer_oserializer : +class BOOST_SYMBOL_VISIBLE basic_pointer_oserializer : public basic_serializer { protected: diff --git a/include/boost/archive/detail/basic_serializer_map.hpp b/include/boost/archive/detail/basic_serializer_map.hpp index e21afd2a..dbfc7c10 100644 --- a/include/boost/archive/detail/basic_serializer_map.hpp +++ b/include/boost/archive/detail/basic_serializer_map.hpp @@ -34,7 +34,7 @@ namespace detail { class basic_serializer; -class BOOST_ARCHIVE_OR_WARCHIVE_DECL +class BOOST_SYMBOL_VISIBLE basic_serializer_map : public boost::noncopyable { diff --git a/include/boost/archive/impl/basic_binary_iarchive.ipp b/include/boost/archive/impl/basic_binary_iarchive.ipp index 8c35a424..d5619ab6 100644 --- a/include/boost/archive/impl/basic_binary_iarchive.ipp +++ b/include/boost/archive/impl/basic_binary_iarchive.ipp @@ -48,7 +48,7 @@ basic_binary_iarchive::load_override(class_name_type & t){ template BOOST_ARCHIVE_OR_WARCHIVE_DECL void -basic_binary_iarchive::init(){ +basic_binary_iarchive::init(void){ // read signature in an archive version independent manner std::string file_signature; diff --git a/include/boost/archive/polymorphic_iarchive.hpp b/include/boost/archive/polymorphic_iarchive.hpp index 5d0c95d9..c4ccd66e 100644 --- a/include/boost/archive/polymorphic_iarchive.hpp +++ b/include/boost/archive/polymorphic_iarchive.hpp @@ -49,7 +49,7 @@ namespace detail { class polymorphic_iarchive; -class polymorphic_iarchive_impl : +class BOOST_SYMBOL_VISIBLE polymorphic_iarchive_impl : public detail::interface_iarchive { #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS @@ -154,7 +154,7 @@ public: namespace boost { namespace archive { -class polymorphic_iarchive : +class BOOST_SYMBOL_VISIBLE polymorphic_iarchive : public polymorphic_iarchive_impl { public: diff --git a/include/boost/archive/polymorphic_oarchive.hpp b/include/boost/archive/polymorphic_oarchive.hpp index 76a6016f..5211dda3 100644 --- a/include/boost/archive/polymorphic_oarchive.hpp +++ b/include/boost/archive/polymorphic_oarchive.hpp @@ -48,7 +48,7 @@ namespace detail { class polymorphic_oarchive; -class polymorphic_oarchive_impl : +class BOOST_SYMBOL_VISIBLE polymorphic_oarchive_impl : public detail::interface_oarchive { #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS @@ -138,7 +138,7 @@ public: }; // note: preserve naming symmetry -class polymorphic_oarchive : +class BOOST_SYMBOL_VISIBLE polymorphic_oarchive : public polymorphic_oarchive_impl { public: diff --git a/include/boost/archive/text_iarchive.hpp b/include/boost/archive/text_iarchive.hpp index 519bd203..e40db837 100644 --- a/include/boost/archive/text_iarchive.hpp +++ b/include/boost/archive/text_iarchive.hpp @@ -40,7 +40,7 @@ namespace detail { } // namespace detail template -class text_iarchive_impl : +class BOOST_SYMBOL_VISIBLE text_iarchive_impl : public basic_text_iprimitive, public basic_text_iarchive { @@ -116,7 +116,7 @@ protected: namespace boost { namespace archive { -class text_iarchive : +class BOOST_SYMBOL_VISIBLE text_iarchive : public text_iarchive_impl{ public: text_iarchive(std::istream & is_, unsigned int flags = 0) : diff --git a/include/boost/archive/text_oarchive.hpp b/include/boost/archive/text_oarchive.hpp index fddb30cd..7eaea172 100644 --- a/include/boost/archive/text_oarchive.hpp +++ b/include/boost/archive/text_oarchive.hpp @@ -47,7 +47,7 @@ namespace detail { } // namespace detail template -class text_oarchive_impl : +class BOOST_SYMBOL_VISIBLE text_oarchive_impl : /* protected ? */ public basic_text_oprimitive, public basic_text_oarchive { @@ -103,7 +103,7 @@ public: // do not derive from this class. If you want to extend this functionality // via inhertance, derived from text_oarchive_impl instead. This will // preserve correct static polymorphism. -class text_oarchive : +class BOOST_SYMBOL_VISIBLE text_oarchive : public text_oarchive_impl { public: diff --git a/include/boost/archive/text_wiarchive.hpp b/include/boost/archive/text_wiarchive.hpp index f900d872..3adf068a 100644 --- a/include/boost/archive/text_wiarchive.hpp +++ b/include/boost/archive/text_wiarchive.hpp @@ -44,7 +44,7 @@ namespace detail { } // namespace detail template -class text_wiarchive_impl : +class BOOST_SYMBOL_VISIBLE text_wiarchive_impl : public basic_text_iprimitive, public basic_text_iarchive { @@ -114,7 +114,7 @@ protected: namespace boost { namespace archive { -class text_wiarchive : +class BOOST_SYMBOL_VISIBLE text_wiarchive : public text_wiarchive_impl{ public: text_wiarchive(std::wistream & is, unsigned int flags = 0) : diff --git a/include/boost/archive/text_woarchive.hpp b/include/boost/archive/text_woarchive.hpp index 37aebb2a..b6b4f8ed 100644 --- a/include/boost/archive/text_woarchive.hpp +++ b/include/boost/archive/text_woarchive.hpp @@ -52,7 +52,7 @@ namespace detail { } // namespace detail template -class text_woarchive_impl : +class BOOST_SYMBOL_VISIBLE text_woarchive_impl : public basic_text_oprimitive, public basic_text_oarchive { @@ -129,7 +129,7 @@ public: // do not derive from this class. If you want to extend this functionality // via inhertance, derived from text_oarchive_impl instead. This will // preserve correct static polymorphism. -class text_woarchive : +class BOOST_SYMBOL_VISIBLE text_woarchive : public text_woarchive_impl { public: diff --git a/include/boost/archive/xml_archive_exception.hpp b/include/boost/archive/xml_archive_exception.hpp index 9c03fe60..88a8f4bc 100644 --- a/include/boost/archive/xml_archive_exception.hpp +++ b/include/boost/archive/xml_archive_exception.hpp @@ -31,7 +31,7 @@ namespace archive { ////////////////////////////////////////////////////////////////////// // exceptions thrown by xml archives // -class BOOST_ARCHIVE_DECL xml_archive_exception : +class BOOST_SYMBOL_VISIBLE xml_archive_exception : public virtual boost::archive::archive_exception { public: diff --git a/include/boost/archive/xml_iarchive.hpp b/include/boost/archive/xml_iarchive.hpp index a64a030a..055ba0f4 100644 --- a/include/boost/archive/xml_iarchive.hpp +++ b/include/boost/archive/xml_iarchive.hpp @@ -44,7 +44,7 @@ class basic_xml_grammar; typedef basic_xml_grammar xml_grammar; template -class xml_iarchive_impl : +class BOOST_SYMBOL_VISIBLE xml_iarchive_impl : public basic_text_iprimitive, public basic_xml_iarchive { @@ -128,7 +128,7 @@ protected: namespace boost { namespace archive { -class xml_iarchive : +class BOOST_SYMBOL_VISIBLE xml_iarchive : public xml_iarchive_impl{ public: xml_iarchive(std::istream & is, unsigned int flags = 0) : diff --git a/include/boost/archive/xml_oarchive.hpp b/include/boost/archive/xml_oarchive.hpp index 54d55d5c..c5e6da92 100644 --- a/include/boost/archive/xml_oarchive.hpp +++ b/include/boost/archive/xml_oarchive.hpp @@ -47,7 +47,7 @@ namespace detail { } // namespace detail template -class xml_oarchive_impl : +class BOOST_SYMBOL_VISIBLE xml_oarchive_impl : public basic_text_oprimitive, public basic_xml_oarchive { @@ -118,7 +118,7 @@ public: // do not derive from this class. If you want to extend this functionality // via inhertance, derived from xml_oarchive_impl instead. This will // preserve correct static polymorphism. -class xml_oarchive : +class BOOST_SYMBOL_VISIBLE xml_oarchive : public xml_oarchive_impl { public: diff --git a/include/boost/archive/xml_wiarchive.hpp b/include/boost/archive/xml_wiarchive.hpp index 47a918e0..dbc2d721 100644 --- a/include/boost/archive/xml_wiarchive.hpp +++ b/include/boost/archive/xml_wiarchive.hpp @@ -58,7 +58,7 @@ class basic_xml_grammar; typedef basic_xml_grammar xml_wgrammar; template -class xml_wiarchive_impl : +class BOOST_SYMBOL_VISIBLE xml_wiarchive_impl : public basic_text_iprimitive, public basic_xml_iarchive { @@ -142,7 +142,7 @@ protected: namespace boost { namespace archive { -class xml_wiarchive : +class BOOST_SYMBOL_VISIBLE xml_wiarchive : public xml_wiarchive_impl{ public: xml_wiarchive(std::wistream & is, unsigned int flags = 0) : diff --git a/include/boost/archive/xml_woarchive.hpp b/include/boost/archive/xml_woarchive.hpp index f31ee4f7..62700162 100644 --- a/include/boost/archive/xml_woarchive.hpp +++ b/include/boost/archive/xml_woarchive.hpp @@ -61,7 +61,7 @@ namespace detail { } // namespace detail template -class xml_woarchive_impl : +class BOOST_SYMBOL_VISIBLE xml_woarchive_impl : public basic_text_oprimitive, public basic_xml_oarchive { @@ -135,7 +135,7 @@ public: // do not derive from this class. If you want to extend this functionality // via inhertance, derived from xml_woarchive_impl instead. This will // preserve correct static polymorphism. -class xml_woarchive : +class BOOST_SYMBOL_VISIBLE xml_woarchive : public xml_woarchive_impl { public: diff --git a/include/boost/serialization/extended_type_info.hpp b/include/boost/serialization/extended_type_info.hpp index 5a50ada1..d62d5f82 100644 --- a/include/boost/serialization/extended_type_info.hpp +++ b/include/boost/serialization/extended_type_info.hpp @@ -41,7 +41,7 @@ namespace void_cast_detail{ class void_caster; } -class BOOST_SERIALIZATION_DECL extended_type_info : +class BOOST_SYMBOL_VISIBLE extended_type_info : private boost::noncopyable { private: diff --git a/include/boost/serialization/extended_type_info_no_rtti.hpp b/include/boost/serialization/extended_type_info_no_rtti.hpp index e9e82587..9539f1d3 100644 --- a/include/boost/serialization/extended_type_info_no_rtti.hpp +++ b/include/boost/serialization/extended_type_info_no_rtti.hpp @@ -52,7 +52,7 @@ namespace no_rtti_system { // common base class to share type_info_key. This is used to // identify the method used to keep track of the extended type -class BOOST_SERIALIZATION_DECL extended_type_info_no_rtti_0 : +class BOOST_SYMBOL_VISIBLE extended_type_info_no_rtti_0 : public extended_type_info { protected: diff --git a/include/boost/serialization/extended_type_info_typeid.hpp b/include/boost/serialization/extended_type_info_typeid.hpp index 3c3fadfe..e769ef14 100644 --- a/include/boost/serialization/extended_type_info_typeid.hpp +++ b/include/boost/serialization/extended_type_info_typeid.hpp @@ -49,7 +49,7 @@ namespace boost { namespace serialization { namespace typeid_system { -class BOOST_SERIALIZATION_DECL extended_type_info_typeid_0 : +class BOOST_SYMBOL_VISIBLE extended_type_info_typeid_0 : public extended_type_info { virtual const char * get_debug_info() const { diff --git a/include/boost/serialization/void_cast.hpp b/include/boost/serialization/void_cast.hpp index a0aa5a81..669abb27 100644 --- a/include/boost/serialization/void_cast.hpp +++ b/include/boost/serialization/void_cast.hpp @@ -89,7 +89,7 @@ void_downcast( namespace void_cast_detail { -class BOOST_SERIALIZATION_DECL void_caster : +class BOOST_SYMBOL_VISIBLE void_caster : private boost::noncopyable { friend @@ -151,7 +151,7 @@ public: #endif template -class void_caster_primitive : +class BOOST_SYMBOL_VISIBLE void_caster_primitive : public void_caster { virtual void const * downcast(void const * const t) const { @@ -199,7 +199,7 @@ void_caster_primitive::~void_caster_primitive(){ } template -class void_caster_virtual_base : +class BOOST_SYMBOL_VISIBLE void_caster_virtual_base : public void_caster { virtual bool has_virtual_base() const { @@ -244,7 +244,7 @@ void_caster_virtual_base::~void_caster_virtual_base(){ } template -struct void_caster_base : +struct BOOST_SYMBOL_VISIBLE void_caster_base : public void_caster { typedef @@ -281,7 +281,7 @@ inline const void_cast_detail::void_caster & void_cast_register( } template -class void_caster : +class BOOST_SYMBOL_VISIBLE void_caster : public void_cast_detail::void_caster_base::type { }; diff --git a/src/basic_archive.cpp b/src/basic_archive.cpp index 88cad3fa..1a7b57d1 100644 --- a/src/basic_archive.cpp +++ b/src/basic_archive.cpp @@ -41,7 +41,7 @@ namespace archive { // constants used in archive signature //This should never ever change. note that is not an std::string // string. -BOOST_ARCHIVE_DECL const char * +BOOST_SYMBOL_VISIBLE const char * BOOST_ARCHIVE_SIGNATURE(){ return "serialization::archive"; } @@ -75,7 +75,7 @@ BOOST_ARCHIVE_SIGNATURE(){ // 12- improved serialization of collections // 13- simplified visibility, removed Borland, removed pfto -BOOST_ARCHIVE_DECL library_version_type +BOOST_SYMBOL_VISIBLE library_version_type BOOST_ARCHIVE_VERSION(){ return library_version_type(13); } diff --git a/src/basic_xml_archive.cpp b/src/basic_xml_archive.cpp index c1bdc5fd..3d846633 100644 --- a/src/basic_xml_archive.cpp +++ b/src/basic_xml_archive.cpp @@ -14,35 +14,35 @@ namespace boost { namespace archive { -BOOST_ARCHIVE_DECL const char * +BOOST_SYMBOL_VISIBLE const char * BOOST_ARCHIVE_XML_OBJECT_ID(){ return "object_id"; } -BOOST_ARCHIVE_DECL const char * +BOOST_SYMBOL_VISIBLE const char * BOOST_ARCHIVE_XML_OBJECT_REFERENCE(){ return "object_id_reference"; } -BOOST_ARCHIVE_DECL const char * +BOOST_SYMBOL_VISIBLE const char * BOOST_ARCHIVE_XML_CLASS_ID(){ return "class_id"; } -BOOST_ARCHIVE_DECL const char * +BOOST_SYMBOL_VISIBLE const char * BOOST_ARCHIVE_XML_CLASS_ID_REFERENCE(){ return "class_id_reference"; } -BOOST_ARCHIVE_DECL const char * +BOOST_SYMBOL_VISIBLE const char * BOOST_ARCHIVE_XML_CLASS_NAME(){ return "class_name"; } -BOOST_ARCHIVE_DECL const char * +BOOST_SYMBOL_VISIBLE const char * BOOST_ARCHIVE_XML_TRACKING(){ return "tracking_level"; } -BOOST_ARCHIVE_DECL const char * +BOOST_SYMBOL_VISIBLE const char * BOOST_ARCHIVE_XML_VERSION(){ return "version"; } -BOOST_ARCHIVE_DECL const char * +BOOST_SYMBOL_VISIBLE const char * BOOST_ARCHIVE_XML_SIGNATURE(){ return "signature"; } diff --git a/src/void_cast.cpp b/src/void_cast.cpp index 6a2683ed..8ea5595e 100644 --- a/src/void_cast.cpp +++ b/src/void_cast.cpp @@ -27,6 +27,7 @@ // BOOST #define BOOST_SERIALIZATION_SOURCE +#include #include #include #include @@ -306,6 +307,13 @@ void_caster::recursive_unregister() const { } // namespace void_cast_detail +BOOST_SYMBOL_VISIBLE void const * +void_upcast( + extended_type_info const & derived, + extended_type_info const & base, + void const * const t +); + // Given a void *, assume that it really points to an instance of one type // and alter it so that it would point to an instance of a related type. // Return the altered pointer. If there exists no sequence of casts that @@ -333,6 +341,13 @@ void_upcast( return NULL; } +BOOST_SYMBOL_VISIBLE void const * +void_downcast( + extended_type_info const & derived, + extended_type_info const & base, + void const * const t +); + BOOST_SERIALIZATION_DECL void const * void_downcast( extended_type_info const & derived,