Defined in header `<type_traits>` | ||
---|---|---|

template< class T > struct make_signed; | (since C++11) |

If `T`

is an integral (except `bool`

) or enumeration type, provides the member typedef `type`

which is the signed integer type corresponding to `T`

, with the same cv-qualifiers.

If `T`

is signed or unsigned `char`

, `short`

, `int`

, `long`

, `long long`

, the signed type from this list corresponding to `T`

is provided.

If `T`

is an enumeration type or `char`

, `wchar_t`

, `char8_t`

(since C++20), `char16_t`

, `char32_t`

, the signed integer type with the smallest rank having the same `sizeof`

as `T`

is provided.

Otherwise, the behavior is undefined. | (until C++20) |

Otherwise, the program is ill-formed. | (since C++20) |

The behavior of a program that adds specializations for `make_signed`

is undefined.

Name | Definition |
---|---|

`type` | the signed integer type corresponding to `T` |

template< class T > using make_signed_t = typename make_signed<T>::type; | (since C++14) |

#include <iostream> #include <type_traits> int main() { typedef std::make_signed<unsigned char>::type char_type; typedef std::make_signed<unsigned int>::type int_type; typedef std::make_signed<volatile unsigned long>::type long_type; bool ok1 = std::is_same<char_type, signed char>::value; bool ok2 = std::is_same<int_type, signed int>::value; bool ok3 = std::is_same<long_type, volatile signed long>::value; std::cout << std::boolalpha << "char_type is 'signed char'? : " << ok1 << '\n' << "int_type is 'signed int'? : " << ok2 << '\n' << "long_type is 'volatile signed long'? : " << ok3 << '\n'; }

Output:

char_type is 'signed char'? : true int_type is 'signed int'? : true long_type is 'volatile signed long'? : true

(C++11) | checks if a type is a signed arithmetic type (class template) |

(C++11) | checks if a type is an unsigned arithmetic type (class template) |

(C++11) | makes the given integral type unsigned (class template) |

© cppreference.com

Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.

https://en.cppreference.com/w/cpp/types/make_signed