Hi everyone, this is my first post so I apologies if I got some of the housekeeping wrong. I did my best.

I also realise that this is likely to be a common question but all the responses I could find on Stackoverflow (among others) were related to older implementations of boost. My understanding is that Boost 1.54 is supposed to support `std::shared_ptr`.

To illustrate the issue I am having, suppose we want to serialize a class containing a vector of shared pointers, along with a static `load` function that will build the class from a file and a `save` function that will store the instance to a file, and suppose that we can't just use the `serialize` member function for whatever reason (this particular example doesn't really illustrate such a case but in my code I can't use the `serialize` member function so this example doesn't use it either):

    #include <boost/archive/text_iarchive.hpp>
    #include <boost/archive/text_oarchive.hpp>
   
    #include <boost/serialization/vector.hpp>
    #include <boost/serialization/shared_ptr.hpp>
   
    #include <fstream>
    #include <memory>
    #include <vector>
   
    class A
    {
    public:
        std::vector<std::shared_ptr<int>> v;
   
        void A::Save(char * const filename);
        static A * const Load(char * const filename);
   
            //////////////////////////////////
            // Boost Serialization:
            //
        private:
            friend class boost::serialization::access;
            template<class Archive> void serialize(Archive & ar, const unsigned int file_version) {}
    };
   
    // save the world to a file:
    void A::Save(char * const filename)
    {
        // create and open a character archive for output
        std::ofstream ofs(filename);
   
        // save data to archive
        {
            boost::archive::text_oarchive oa(ofs);
   
            // write the pointer to file
            oa << this;
        }
    }
   
    // load world from file
    A * const A::Load(char * const filename)
    {
        A * a;
   
        // create and open an archive for input
        std::ifstream ifs(filename);
   
        boost::archive::text_iarchive ia(ifs);
   
        // read class pointer from archive
        ia >> a;
   
        return a;
    }
   
    namespace boost
    {
        namespace serialization
        {
            template<class Archive>
            inline void save_construct_data(
            Archive & ar, A const * t, unsigned const int file_version
            )
            {
                ar << t->v;
            }
   
            template<class Archive>
            inline void load_construct_data(
            Archive & ar, A * t, const unsigned int file_version
            )
            {
                ar >> t->v;
            }
        }
    }
   
    int main()
    {
   
    }

Why doesn't this code compile? What am I doing wrong here? The error message states that 'serialize' is not a member of 'shared_ptr'. Why am I am getting this message?