Using type traits

In order to extract information about template types, the STL provides a type traits library, available in the <type_traits> header. All type traits are evaluated at compile time. For example, this function, which returns 1 if the value is zero or above and -1, otherwise, can immediately return 1 for unsigned integers as follows:

template <typename T> 
auto sign_func(const T& v) -> int { 
  if (std::is_unsigned_v<T>) { 
    return 1; 
  } 
  return v < 0 ? -1 : 1; 
} 

As they are evaluated at compile time, the compiler will generate codes as shown in the following table when invoked with an unsigned and signed integer, respectively:

Used with an unsigned integer... ...generated function:
auto unsigned_v = uint32_t{32}; auto sign=sign_func(unsigned_v); ...

Get C++ High Performance now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.