std::make_unsigned
Определено в заголовке <type_traits> | ||
|---|---|---|
template< class T > struct make_unsigned; | (с C++11) |
Если T является целочисленным типом (кроме bool) или типом перечисления, предоставляет член typedef type, который является типом целого без знака, соответствующим T, с теми же cv-квалификаторами.
Если T — это знаковый или беззнаковый тип char, short, int, long, long long; предоставляется беззнаковый тип из этого списка, соответствующий T.
Если T — это тип перечисления или char, wchar_t, char8_t(с C++20), char16_t, char32_t; предоставляется тип целого без знака с наименьшим рангом, имеющим те же sizeof что и T.
| В противном случае поведение не определено. | (до C++20) |
| В противном случае программа имеет ошибку. | (с C++20) |
Поведение программы, добавляющей специализации для std::make_unsigned, не определено.
Типы-члены
| Название | Определение |
|---|---|
type | тип целого без знака, соответствующий T |
Вспомогательные типы
template< class T > using make_unsigned_t = typename make_unsigned<T>::type; | (с C++14) |
Пример
#include <type_traits>
int main()
{
using uchar_type = std::make_unsigned_t<char>;
using uint_type = std::make_unsigned_t<int>;
using ulong_type = std::make_unsigned_t<volatile long>;
static_assert(
std::is_same_v<uchar_type, unsigned char> and
std::is_same_v<uint_type, unsigned int> and
std::is_same_v<ulong_type, volatile unsigned long>
);
}См. также
|
(C++11) | проверяет, является ли тип знаковым арифметическим типом (шаблон класса) |
|
(C++11) | проверяет, является ли тип беззнаковым арифметическим типом (шаблон класса) |
|
(C++11) | делает данный целочисленный тип знаковым (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/types/make_unsigned