Of course we can create a template to get absolute value from any type of integers:
Code:
#define BYTE_SIZE 8
template  <typename  T>
T mabs(T x)
{
	T t = x >> (sizeof(T)*BYTE_SIZE - 1);
	return  t ^ (x + t);
}
usage
Code:
long int z = mabs<long int>(-11547);
Now, it looks funny since it seems as if this can be used to get "absolute" value of any structure or class. It may but only if >> is defined. For example >> is not defined for double and float.