Namespaces
Variants

std:: make_signed

From cppreference.net
Metaprogramming library
Type traits
Type categories
(C++11)
(C++11) ( DR* )
Type properties
(C++11)
(C++11)
(C++14)
(C++11) (deprecated in C++26)
(C++11) ( until C++20* )
(C++11) (deprecated in C++20)
(C++11)
Type trait constants
Metafunctions
(C++17)
Supported operations
Relationships and property queries
Type modifications
(C++11) (C++11) (C++11)
make_signed
(C++11)
Type transformations
(C++11) (deprecated in C++23)
(C++11) (deprecated in C++23)
(C++11)
(C++11) ( until C++20* ) (C++17)

Compile-time rational arithmetic
Compile-time integer sequences
Definido en el encabezado <type_traits>
template < class T >
struct make_signed ;
(desde C++11)

Si T es un tipo integral (excepto bool ) o de enumeración, proporciona el typedef miembro type que es el tipo entero con signo correspondiente a T , con los mismos calificadores cv.

Si T es char con o sin signo, short , int , long , long long , se proporciona el tipo con signo correspondiente de esta lista para T .

Si T es un tipo de enumeración o char , wchar_t , char8_t (desde C++20) , char16_t , char32_t , se proporciona el tipo entero con signo de menor rango que tenga el mismo sizeof que T .

De lo contrario, el comportamiento es indefinido.

(until C++20)

De lo contrario, el programa está mal formado.

(since C++20)

Si el programa añade especializaciones para std::make_signed , el comportamiento no está definido.

Contenidos

Tipos de miembros

Nombre Definición
type el tipo entero con signo correspondiente a T

Tipos auxiliares

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

Ejemplo

#include <type_traits>
enum struct E : unsigned short {};
int main()
{
    using char_type = std::make_signed_t<unsigned char>;
    using int_type  = std::make_signed_t<unsigned int>;
    using long_type = std::make_signed_t<volatile unsigned long>;
    using enum_type = std::make_signed_t<E>;
    static_assert(
        std::is_same_v<char_type, signed char> and
        std::is_same_v<int_type, signed int> and
        std::is_same_v<long_type, volatile signed long> and
        std::is_same_v<enum_type, signed short>
    );
}

Véase también

(C++11)
verifica si un tipo es un tipo aritmético con signo
(plantilla de clase)
verifica si un tipo es un tipo aritmético sin signo
(plantilla de clase)
obtiene el tipo con signo correspondiente para el tipo integral dado
(plantilla de clase)