std::make_unsigned
Материал из cppreference.com
Определено в заголовочном файле <type_traits> | ||
template<class T > struct make_unsigned; | (начиная с C++11) | |
Если T
является целым числом (кроме bool) или типом перечисления, предоставляет typedef элемент type
, который представляет собой целочисленный тип без знака, соответствующий T
с теми же cv-квалификаторами.
Если T
со знаком или без знака char, short, int, long, longlong; предоставляет беззнаковый тип из этого списка, соответствующий 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<volatilelong>; static_assert(std::is_same_v<uchar_type, unsignedchar> and std::is_same_v<uint_type, unsignedint> and std::is_same_v<ulong_type, volatileunsignedlong>);}
[править]Смотрите также
(C++11) | проверяет, является ли тип арифметическим типом со знаком (шаблон класса) |
(C++11) | проверяет, является ли тип беззнаковым арифметическим типом (шаблон класса) |
(C++11) | делает данный целочисленный тип знаковым (шаблон класса) |