#include <iostream>
#include <bitset>
#include <climits>
using namespace std;

template<typename T>
void serialize_as_bin(const T &t, ostream& os) {
  const unsigned char *p = reinterpret_cast<const unsigned char *>(&t);
  for(size_t s = 0; s < sizeof t; ++s, ++p) serialize_as_bin(*p, os);
}

template<>
void serialize_as_bin(const unsigned char &t, ostream& os) {
  // Code to serialize one byte
  std::bitset<CHAR_BIT> x(t);
  os << x;
}

struct Person {
  int a;
  double b;

  ostream& serialize_as_binary(ostream& os) {
    serialize_as_bin(a, os);
    serialize_as_bin(b, os);
    return os;
  }
};

int main() {
	Person p;
	p.a = 42;
	p.b = 3.14;
	p.serialize_as_binary(std::cout);
	std::cout.flush();
	return 0;
}