|   Defined in header   <type_traits>  |  ||
|---|---|---|
 template< class T > struct is_signed;  |  (since C++11) | 
If T is a signed arithmetic type, provides the member constant value equal true. For any other type, value is false.
Template parameters
| T | - | a type to check | 
Helper variable template
 template< class T > constexpr bool is_signed_v = is_signed<T>::value;  |  (since C++17) | 
Inherited from std::integral_constant
Member constants
|   value  [static]   |   true if T is a signed arithmetic type , false otherwise (public static member constant)  |  
Member functions
|   operator bool  |   converts the object to bool, returns value (public member function)  |  
|   operator()  (C++14)   |   returns value (public member function)  |  
Member types
| Type | Definition | 
|---|---|
 value_type  |   bool  |  
 type  |   std::integral_constant<bool, value>  |  
Possible implementation
 namespace detail {
template<typename T,bool = std::is_arithmetic<T>::value>
struct is_signed : std::integral_constant<bool, T(-1) < T(0)> {};
 
template<typename T>
struct is_signed<T,false> : std::false_type {};
} // namespace detail
 
template<typename T>
struct is_signed : detail::is_signed<T>::type {}; |  
Example
#include <iostream>
#include <type_traits>
 
class A {};
enum B : int {};
enum class C : int {};
 
int main() 
{
    std::cout << std::boolalpha;
    std::cout << std::is_signed<A>::value << '\n';
    std::cout << std::is_signed<float>::value << '\n';
    std::cout << std::is_signed<signed int>::value << '\n';
    std::cout << std::is_signed<unsigned int>::value << '\n';
    std::cout << std::is_signed<B>::value << '\n';
    std::cout << std::is_signed<C>::value << '\n';
 
    // shorter:
    std::cout << std::is_signed<signed int>() << '\n';
    std::cout << std::is_signed<unsigned int>() << '\n';
}Output:
false true true false false false true false
See also
|   (C++11)   |   checks if a type is unsigned arithmetic type  (class template)  |  
|   [static]   |   identifies signed types  (public static member constant of std::numeric_limits)  |  
|   (C++11)   |   checks if a type is floating-point type  (class template)  |  
|   (C++11)   |   checks if a type is integral type  (class template)  |  
|   (C++11)   |   makes the given integral type signed  (class template)  |  
|   (C++11)   |   makes the given integral type unsigned  (class template)  |  
|    std::experimental::is_signed_v
  (library fundamentals TS)   |   variable template alias of std::is_signed::value (variable template)  |  
Please login to continue.