#include <typeinfo>
#include <iostream>

template <class T, class U>
struct is_same
{
	static const bool value = false;
};

template <class T>
struct is_same<T, T>
{
	static const bool value = true;
};

struct S
{
	long a:3;
	char b:5;
	char c:1;
};

template <class T, class U>
void print_is_same(T, U)
{
	std::cout << typeid(T).name() << " is " << (is_same<T,U>::value? "" : "not ") << "same as " << typeid(U).name() << std::endl;
}

int main()
{
	S s;
	print_is_same(s.a, s.b);
	print_is_same(s.b, s.c);
}