diff --git a/include/boost/archive/binary_iarchive.hpp b/include/boost/archive/binary_iarchive.hpp index 638980ad..b6e1d8e0 100644 --- a/include/boost/archive/binary_iarchive.hpp +++ b/include/boost/archive/binary_iarchive.hpp @@ -36,6 +36,10 @@ public: friend class basic_binary_iarchive; friend class load_access; #endif + // return a pointer to the most derived class + Archive * This(){ + return static_cast(this); + } // note: the following should not needed - but one compiler (vc 7.1) // fails to compile one test (test_shared_ptr) without it !!! template diff --git a/include/boost/archive/binary_wiarchive.hpp b/include/boost/archive/binary_wiarchive.hpp index 85f38f81..6696fda5 100644 --- a/include/boost/archive/binary_wiarchive.hpp +++ b/include/boost/archive/binary_wiarchive.hpp @@ -31,10 +31,14 @@ class binary_wiarchive_impl : #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS public: #else + friend class detail::interface_iarchive; friend class basic_binary_iarchive; - friend class basic_binary_iprimitive; friend class load_access; #endif + // return a pointer to the most derived class + Archive * This(){ + return static_cast(this); + } // note: the following should not needed - but one compiler (vc 7.1) // fails to compile one test (test_shared_ptr) without it !!! template diff --git a/include/boost/archive/binary_woarchive.hpp b/include/boost/archive/binary_woarchive.hpp index 269ce791..97a9002c 100644 --- a/include/boost/archive/binary_woarchive.hpp +++ b/include/boost/archive/binary_woarchive.hpp @@ -31,8 +31,8 @@ class binary_woarchive_impl : #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS public: #else + friend class detail::interface_oarchive; friend class basic_binary_oarchive; - friend class basic_binary_oprimitive; friend class save_access; protected: #endif diff --git a/include/boost/archive/text_iarchive.hpp b/include/boost/archive/text_iarchive.hpp index 1c64fcf5..68f808a7 100644 --- a/include/boost/archive/text_iarchive.hpp +++ b/include/boost/archive/text_iarchive.hpp @@ -50,6 +50,10 @@ public: #ifndef BOOST_NO_STD_WSTRING void load(std::wstring &ws); #endif + // return a pointer to the most derived class + Archive * This(){ + return static_cast(this); + } // note: the following should not needed - but one compiler (vc 7.1) // fails to compile one test (test_shared_ptr) without it !!! template diff --git a/include/boost/archive/text_oarchive.hpp b/include/boost/archive/text_oarchive.hpp index dfd51a1b..05becebd 100644 --- a/include/boost/archive/text_oarchive.hpp +++ b/include/boost/archive/text_oarchive.hpp @@ -41,7 +41,7 @@ protected: #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS public: #else -// friend class detail::interface_oarchive; + friend class detail::interface_oarchive; friend class basic_text_oarchive; friend class save_access; #endif diff --git a/include/boost/archive/text_woarchive.hpp b/include/boost/archive/text_woarchive.hpp index 816fa0e7..6b4601c8 100644 --- a/include/boost/archive/text_woarchive.hpp +++ b/include/boost/archive/text_woarchive.hpp @@ -41,6 +41,7 @@ protected: #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS public: #else + friend class detail::interface_oarchive; friend class basic_text_oarchive; friend class save_access; #endif diff --git a/include/boost/archive/xml_iarchive.hpp b/include/boost/archive/xml_iarchive.hpp index 1ec27ae4..bb39ea02 100644 --- a/include/boost/archive/xml_iarchive.hpp +++ b/include/boost/archive/xml_iarchive.hpp @@ -65,6 +65,10 @@ public: #ifndef BOOST_NO_STD_WSTRING void load(std::wstring &ws); #endif + // return a pointer to the most derived class + Archive * This(){ + return static_cast(this); + } template void load_override(T & t, BOOST_PFTO int){ basic_xml_iarchive::load_override(t, 0); diff --git a/include/boost/archive/xml_wiarchive.hpp b/include/boost/archive/xml_wiarchive.hpp index 4fdc6ac3..90df4036 100644 --- a/include/boost/archive/xml_wiarchive.hpp +++ b/include/boost/archive/xml_wiarchive.hpp @@ -65,7 +65,10 @@ public: #ifndef BOOST_NO_STD_WSTRING void load(std::wstring &ws); #endif - + // return a pointer to the most derived class + Archive * This(){ + return static_cast(this); + } template void load_override(T & t, BOOST_PFTO int){ basic_xml_iarchive::load_override(t, 0);