void serialize(const void* instance, serializer* sink) const override { auto& ref = *cast(instance); do_serialize(sink, ref, util::get_indices(ref)); }
void do_serialize(std::string const& x, Out& out) { do_serialize(x.size(), out); for(auto ch : x) do_serialize(ch, out); }
void do_serialize(serializer* sink, const Tuple& tup, util::int_list<I, Is...>) { serialze_single<I>(sink, tup, get<I>(tup)); do_serialize(sink, tup, util::int_list<Is...>{}); }