#include <iostream>
#include <string>
#include <sstream>
#include <fstream>
#include <exception>

#include <boost/serialization/string.hpp>
#include <boost/archive/xml_oarchive.hpp>

class person {
  std::string name;
  unsigned age;

  friend class boost::serialization::access;
  template<class Archive>
  void serialize(Archive & ar, const unsigned int version)
  {
    ar & BOOST_SERIALIZATION_NVP(name);
    ar & BOOST_SERIALIZATION_NVP(age);
  }

public:
  person(const std::string n, unsigned a) : name(n), age(a)
  {}
  person(const person& p) : name(p.name), age(p.age)
  {}
};

using namespace std;
using namespace boost::archive;

int main()
{
  person josue("josue", 40);

  ostringstream os;
  xml_oarchive oa(os);

  try {
    oa << BOOST_SERIALIZATION_NVP(josue);
  }
  catch (archive_exception& e) {
    cout << "archive exception: " << e.what() << endl;
  }
  catch (exception& e) {
    cout << "std exception: " << e.what() << endl;
  }

  cout << os.str() << endl;
}