From cppreference.com
staticconstboolis_signed;(until C++11)staticconstexprboolis_signed;(since C++11)The value of std::numeric_limits<T>::is_signed is true for all signed arithmetic types T and false for the unsigned types. This constant is meaningful for all specializations.
Standard specializations
Tvalue of std::numeric_limits<T>::is_signed/* non-specialized */falseboolfalsecharimplementation-defined signedchartrueunsignedcharfalsewchar_timplementation-defined char8_t(since C++20)falsechar16_t(since C++11)falsechar32_t(since C++11)falseshorttrueunsignedshortfalseinttrueunsignedintfalselongtrueunsignedlongfalselonglong(since C++11)trueunsignedlonglong(since C++11)falsefloattruedoubletruelongdoubletrueExample
Run this code
#include<iostream>#include<iomanip>#include<limits>template<typenameT>structtest{test(constchar*name,intw=15){std::cout<<std::left<<std::setw(w)<<(std::numeric_limits<T>::is_specialized?name:"non-specialized")<<" : "<<(std::numeric_limits<T>::is_signed?"":"un")<<"signed\n";}};intmain(){test<bool>{"bool"};test<char>{"char"};test<wchar_t>{"wchar_t"};test<char16_t>{"char16_t"};test<char32_t>{"char32_t"};test<float>{"float"};structdelusion{};test<delusion>{"delusion"};test<decltype(42)>{"decltype(42)"};}Possible output:
bool : unsigned char : signed wchar_t : signed char16_t : unsigned char32_t : unsigned float : signed non-specialized : unsigned decltype(42) : signed See also
(C++11)
checks if a type is a signed arithmetic type
(class template)
[static]
identifies integer types
(public static member constant)
[static]
identifies exact types
(public static member constant)
[static]
identifies types that represent a finite set of values
(public static member constant)