#include "dumper.h"

#include <boost/mpl/list.hpp>

#include <string>

template <typename T_>
class Tag {};

struct Class : public std::string,
			   public Dumper<mpl::list<std::string, char,
			                           int, std::string, char>, 2>
{
	Class() : std::string("derived from string") {}
	char c1;
	int i1;
	std::string s1;
	char c2;
};

int main() {
	Class c;
	c.c1 = 'a';
	c.i1 = 2;
	c.s1 = "hello world";
	c.c2 = 'b';

	std::cout << sizeof(Class) << std::endl;

	char* p = (char*)(&c);
	for (size_t i = 0; i < sizeof(Class); i++) {
		std::cout << (size_t) p << ": " << *p << std::endl;
		p++;
	}

	std::cout << "******" << std::endl;

	c.dump();

	std::cout << "******" << std::endl;

    Dumper<mpl::list<std::string, char, int, std::string, char>, 2>::dump(&c);
	
	std::cout << std::endl;

	return 0;
}

