#include <iostream>
#include <tuple>
struct point : std::tuple<int, int, int>
{
enum { x, y, z };
};
//
// Overloads to be "found" by boost::serialization.
//
template<typename Archive, typename T0>
void serialize(Archive & ar, std::tuple<T0> & t, const unsigned int)
{
ar & std::get<0>(t);
}
template<typename Archive, typename T0, typename T1>
void serialize(Archive & ar, std::tuple<T0, T1> & t, const unsigned int)
{
ar & std::get<0>(t);
ar & std::get<1>(t);
}
template<typename Archive, typename T0, typename T1, typename T2>
void serialize(Archive & ar, std::tuple<T0, T1, T2> & t, const unsigned int)
{
ar & std::get<0>(t);
ar & std::get<1>(t);
ar & std::get<2>(t);
}
//
// General method?
//
template<typename Archive, typename Head, typename ...Tail>
void serialize(Archive & ar, std::tuple<Head, Tail...> & t, const unsigned int version)
{
ar & std::get<0>(t);
serialize(ar, get_tail_dummy(t), version);
}
int main()
{
point p;
int archive = 0;
serialize(archive, p, 1);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHVwbGU+CgoKc3RydWN0IHBvaW50IDogc3RkOjp0dXBsZTxpbnQsIGludCwgaW50Pgp7CgllbnVtIHsgeCwgeSwgeiB9Owp9OwoKCi8vCi8vIE92ZXJsb2FkcyB0byBiZSAiZm91bmQiIGJ5IGJvb3N0OjpzZXJpYWxpemF0aW9uLgovLwp0ZW1wbGF0ZTx0eXBlbmFtZSBBcmNoaXZlLCB0eXBlbmFtZSBUMD4Kdm9pZCBzZXJpYWxpemUoQXJjaGl2ZSAmIGFyLCBzdGQ6OnR1cGxlPFQwPiAmIHQsIGNvbnN0IHVuc2lnbmVkIGludCkKewogICAgYXIgJiBzdGQ6OmdldDwwPih0KTsKfQoKCnRlbXBsYXRlPHR5cGVuYW1lIEFyY2hpdmUsIHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMT4Kdm9pZCBzZXJpYWxpemUoQXJjaGl2ZSAmIGFyLCBzdGQ6OnR1cGxlPFQwLCBUMT4gJiB0LCBjb25zdCB1bnNpZ25lZCBpbnQpCnsKICAgIGFyICYgc3RkOjpnZXQ8MD4odCk7CiAgICBhciAmIHN0ZDo6Z2V0PDE+KHQpOwp9CgoKdGVtcGxhdGU8dHlwZW5hbWUgQXJjaGl2ZSwgdHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4Kdm9pZCBzZXJpYWxpemUoQXJjaGl2ZSAmIGFyLCBzdGQ6OnR1cGxlPFQwLCBUMSwgVDI+ICYgdCwgY29uc3QgdW5zaWduZWQgaW50KQp7CiAgICBhciAmIHN0ZDo6Z2V0PDA+KHQpOwogICAgYXIgJiBzdGQ6OmdldDwxPih0KTsKICAgIGFyICYgc3RkOjpnZXQ8Mj4odCk7Cn0KCgovLwovLyBHZW5lcmFsIG1ldGhvZD8KLy8KdGVtcGxhdGU8dHlwZW5hbWUgQXJjaGl2ZSwgdHlwZW5hbWUgSGVhZCwgdHlwZW5hbWUgLi4uVGFpbD4Kdm9pZCBzZXJpYWxpemUoQXJjaGl2ZSAmIGFyLCBzdGQ6OnR1cGxlPEhlYWQsIFRhaWwuLi4+ICYgdCwgY29uc3QgdW5zaWduZWQgaW50IHZlcnNpb24pCnsKICAgIGFyICYgc3RkOjpnZXQ8MD4odCk7CiAgICBzZXJpYWxpemUoYXIsIGdldF90YWlsX2R1bW15KHQpLCB2ZXJzaW9uKTsKfQoKCmludCBtYWluKCkKewoJcG9pbnQgcDsKCWludCBhcmNoaXZlID0gMDsKCXNlcmlhbGl6ZShhcmNoaXZlLCBwLCAxKTsKfQ==