Hello
I am using boost 1.38.0

How to serialize shared_ptr member which points to const object.
The following compiles, but is not working i.e the restored boost_shared_ptr  does not point to anything.
I tried to use const_pointer_cast to cast the const away. I suspect that this is the problematic part.

I think the question here is , how should I cast away the const correctly for boost::shared_ptr<const T>?

#include <boost/archive/xml_iarchive.hpp>
#include <boost/archive/xml_oarchive.hpp>
#include <boost/serialization/nvp.hpp>
#include <boost/serialization/utility.hpp>
#include <fstream>
#include <boost/serialization/shared_ptr.hpp>

class B
{
public:
    B()  {  }
    B(int a):ma(a)  {  }

    int ma;

    template<class Archive>
    void serialize(Archive & ar, const unsigned int
        version)
    {
        using boost::serialization::make_nvp;   
        ar & make_nvp("ma",ma);
    }    
};

class BC
{
public:
    BC() { }  
    BC(boost::shared_ptr<B>& t):mac(t) { }
 
    boost::shared_ptr<const B> mac;

     template<class Archive>
    void serialize(Archive & ar, const unsigned int  version)
    {
        using boost::serialization::make_nvp;         
        ar & make_nvp("mac", boost::const_pointer_cast<B> (mac));
    }
};

int main()
{
   std::ofstream ofs(L"C:\\MyTest.xml");
    std::ifstream ifs(L"C:\\MyTest.xml");

    boost::shared_ptr<B> bb(new B(4));

    BC aa(bb);

    {
        boost::archive::text_oarchive oa(ofs);
        oa & BOOST_SERIALIZATION_NVP(aa);
    }

    BC raa;
    {
        boost::archive::text_iarchive ia(ifs);
        ia & BOOST_SERIALIZATION_NVP(raa);
    }

}