std::make_signed
From cppreference.com
| ヘッダ <type_traits> で定義 |
||
| template< class T > struct make_signed; |
(C++11以降) | |
Tが(boolを除く)整数型または列挙型の場合、メンバー型エイリアスtypeを提供します。これは、同じcv修飾子を持つTに対応する符号付き整数型です。
Tが符号付きまたは符号なしのchar、short、int、long、long longの場合、このリストからTに対応する符号付き型が提供されます。
Tが列挙型またはchar、wchar_t、char8_t(C++20以降)、char16_t、char32_tの場合、Tと同じsizeofを持つ、最小のランクの符号付き整数型が提供されます。
|
それ以外の場合、動作は未定義です。 |
(C++20まで) |
|
それ以外の場合、プログラムは不適格となります。 |
(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) |
型が符号付き算術型であるかをチェックする (クラステンプレート) |
| (C++11) |
型が符号なし算術型であるかをチェックする (クラステンプレート) |
| (C++11) |
与えられた整数型に対応する符号付き型を取得する (クラステンプレート) |