#include<iostream>
#include<fstream>

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

typedef union{
	struct { long x, y; };
} long2;

namespace boost{ namespace serialization {
	template<class Archive> void serialize(Archive &ar, long2 &i, const unsigned version){
	   ar & make_nvp("x",i.x);
	   ar & make_nvp("y",i.y);
	}
}};

int main(void){
	// output, works fine
	long2 a; a.x=1;// a.y=2;
	std::ofstream out("/tmp/a.xml");
	boost::archive::xml_oarchive outA(out);
	outA<<boost::serialization::make_nvp("foo",a);
	out.close();

	// input, compile-time error
	long2 b;
	std::ifstream in("/tmp/a.xml");
	boost::archive::xml_iarchive inA(in);
	inA>>boost::serialization::make_nvp("foo",b);
	in.close();

	// should write 1,2
	std::cerr<<b.x<<","<<b.y<<std::endl;
};