#include <iostream>

template <class T>
std::ostream& operator << (std::ostream& os, T);

template <>
std::ostream& operator << (std::ostream& os, signed char c)
{
	return os << static_cast<int>(c);
}

template <>
std::ostream& operator << (std::ostream& os, unsigned char c)
{
	return os << static_cast<unsigned>(c);
}

int main()
{
	signed char c = -123;
	unsigned char d = 123;
	std::cout << c << ' ' << d;
}