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
std::is_integral
std::is_integral_v will only return true for built-in integers.
std::is_integral_v
The standard allows std::numeric_limits::is_integer to be specialized and return true for custom integral types like boost::multiprecion::cpp_int.
std::numeric_limits::is_integer
boost::multiprecion::cpp_int