std::is_signed

Header: <type_traits>

std::is_signed is a UnaryTypeTrait.

# Declarations

template< class T >
struct is_signed;

(since C++11)

# Example

#include <iostream>
#include <type_traits>
 
class A {};
static_assert(std::is_signed_v<A> == false);
 
class B { int i; };
static_assert(std::is_signed_v<B> == false);
 
enum C : int {};
static_assert(std::is_signed_v<C> == false);
 
enum class D : int {};
static_assert(std::is_signed_v<D> == false);
 
static_assert
(
    std::is_signed<signed int>::value == true and // C++11
    std::is_signed<signed int>() == true and      // C++11
    std::is_signed<signed int>{} == true and      // C++11
    std::is_signed_v<signed int> == true and      // C++17
    std::is_signed_v<unsigned int> == false and
    std::is_signed_v<float> == true and
    std::is_signed_v<bool> == false and
    std::is_signed_v<signed char> == true and
    std::is_signed_v<unsigned char> == false
);
 
int main()
{
    // signedness of char is implementation-defined:
    std::cout << std::boolalpha << std::is_signed_v<char> << '\n';
}

# Defect reports

DRApplied toBehavior as publishedCorrect behavior
LWG 2197C++11value could be true even if T is not an arithmetic typecan only be false in this case

# See also