#include <iostream>
template <typename T>
struct is_unsigned_type
{
static const bool value = static_cast<T>((static_cast<T>(0)-static_cast<T>(1))) > 0;
};
template <typename T>
struct is_signed_type
{
static const bool value = !is_unsigned_type<T>::value;
};
template <typename T>
class copy_functor
{
public: void operator() (const T& source,T& destination) const
{
destination = source;
}
};
int main()
{
std::cout << is_unsigned_type<int>::value <<std::endl;
std::cout << is_unsigned_type<unsigned int>::value <<std::endl;
int x=1;
int y=2;
copy_functor<int> copy;
copy(x,y);
std::cout << x << y <<std::endl;
std::cout << &x << &y <<std::endl;
}