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
Défini dans l'en-tête <type_traits>
template < class T >
struct make_signed ;
(depuis C++11)

Si T est un type intégral (sauf bool ) ou un type énumération, fournit le typedef membre type qui est le type entier signé correspondant à T , avec les mêmes qualificateurs cv.

Si T est un char signé ou non signé, short , int , long , long long , le type signé correspondant à T dans cette liste est fourni.

Si T est un type énumération ou char , wchar_t , char8_t (depuis C++20) , char16_t , char32_t , le type entier signé ayant le plus petit rang avec la même sizeof que T est fourni.

Sinon, le comportement est indéfini.

(until C++20)

Sinon, le programme est mal formé.

(since C++20)

Si le programme ajoute des spécialisations pour std::make_signed , le comportement est indéfini.

Table des matières

Types membres

Nom Définition
type le type entier signé correspondant à T

Types auxiliaires

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

Exemple

#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>
    );
}

Voir aussi

(C++11)
vérifie si un type est un type arithmétique signé
(modèle de classe)
vérifie si un type est un type arithmétique non signé
(modèle de classe)
obtient le type signé correspondant pour le type intégral donné
(modèle de classe)