C++11 provides two type trait template classes: std::is_integer and std::is_integral. However, I cannot tell the differences between them.
std::is_integer does not exist.
That being said, std::numeric_limits does exist.
I'm not aware of any significant difference between std::numeric_limits and std::is_integral. The latter was designed much later and became standard in C++11, whereas the former was introduced in C++98.