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
定義先ヘッダ <type_traits>
template < class T >
struct make_signed ;
(C++11以降)

T が( bool を除く)整数型または列挙型の場合、同じcv修飾子を持つ T に対応する符号付き整数型であるメンバーtypedef type を提供します。

T が符号付きまたは符号なしの char short int long long long である場合、このリストから T に対応する符号付き型が提供されます。

T が列挙型または char wchar_t char8_t (C++20以降) char16_t char32_t の場合、 T と同じ sizeof を持つ最小の ランク の符号付き整数型が提供される。

そうでない場合、動作は未定義です。

(until C++20)

そうでない場合、プログラムは不適格です。

(since C++20)

プログラムが std::make_signed に対して特殊化を追加する場合、動作は未定義です。

目次

メンバー型

名前 定義
type T に対応する符号付き整数型

ヘルパー型

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

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

関連項目

(C++11)
型が符号付き算術型かどうかをチェックする
(クラステンプレート)
型が符号なし算術型かどうかをチェックする
(クラステンプレート)
指定された整数型に対応する符号なし型を取得する
(クラステンプレート)