$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
From: Robert Ramey (ramey_at_[hidden])
Date: 2007-01-03 11:57:53
I've looked at your program and attempted to compile it.
Basically it seems OK but for one arcane point.
std::string is unique in that it is treated as a primitive datatype for 
purposes of serialization.  This is the an exception to the general rule 
that only C++ primitives are treated this way.   Pointer to prmitives are by 
default set to "not tracked" and shared_ptr serialization requires that all 
types serialized be implemented with tracking enabled.  So you've stumbled 
upon an unusual case.
The rationale for doing this is that most programs use primitives and 
strings all over the place in a program and we don't want to be tracking all 
instances of one of these types just because in one case it happens to be 
used as serializable pointer.
The usual way to handle this is to create an wrapper for string which is 
trackable.  Something like:
class trackable_string : public std::string
{
    template<class Archive>
    serialize(Archive & ar, const unsigned int version){
        ar & m_string;
    }
    private:
        std::string m_string;
    trackable_sting(
};
In theory, the compiler shouldn't emit any extra code when compiled for 
release.
I believe this will address the issue with this program.
Robert Ramey