Пространства имён
Варианты
Действия

std::make_unsigned

Материал из cppreference.com
< cpp‎ | types
 
 
Библиотека метапрограммирования
Свойства типов
Категории типов
(C++11)
(C++14)  
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Свойства типов
(C++11)
(C++11)
(C++14)
(C++11)
(C++11)(до C++20*)
(C++11)(устарело в C++20)
(C++11)
Константы свойств типа
Метафункции
(C++17)
Поддерживаемые операции
Запросы отношений и свойств
Модификации типов
(C++11)(C++11)(C++11)
make_unsigned
(C++11)
Преобразования типов
(C++11)(устарело в C++23)
(C++11)(устарело в C++23)
(C++11)
(C++11)
(C++17)

(C++11)(до C++20*)(C++17)
Рациональная арифметика времени компиляции
Целочисленные последовательности времени компиляции
 
Определено в заголовочном файле <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)
проверяет, является ли тип арифметическим типом со знаком
(шаблон класса) [править]
проверяет, является ли тип беззнаковым арифметическим типом
(шаблон класса) [править]
делает данный целочисленный тип знаковым
(шаблон класса) [править]