最終更新日時:
が更新

履歴 編集

class template
<type_traits>

std::make_unsigned(C++11)

namespace std {
  template <class T>
  struct make_unsigned {
    using type = ;
  };

  template <class T>
  using make_unsigned_t = typename make_unsigned<T>::type; // C++14
}

概要

整数型を符号なしにする。

要件

Tが、整数型もしくは列挙型(cv修飾を許容する)であること。ただしboolは許可されない。

効果

  • make_unsignedは、型Tに対応する符号なし整数型を、メンバ型typeとして定義する。
  • Tがcv修飾されていた場合は、メンバ型typeにも同じcv修飾が付加される。

#include <type_traits>

static_assert(std::is_same<
        std::make_unsigned<unsigned int>::type,
        unsigned int
    >::value,
    "transform unsigned int to unsigned int");

static_assert(std::is_same<
        std::make_unsigned<const int>::type,
        const unsigned int
    >::value,
    "transform const int to const unsigned int");

// my_enumと同じ幅を持つ符号なし整数型に変換
enum my_enum : int { A, B, C };
static_assert(std::is_same<
        std::make_unsigned<my_enum>::type,
        unsigned int
    >::value,
    "transform int based my_enum to unsigned int");

static_assert(std::is_same<
        std::make_unsigned<signed char>::type,
        unsigned char
    >::value,
    "transform signed char to unsigned char");

int main() {}

出力

バージョン

言語

  • C++11

処理系

  • Clang: 3.0
  • GCC, C++11 mode: 4.4.7
  • Visual C++: 10.0, 11.0, 12.0, 14.0
    • 10.0は、cv修飾修飾されている型において、コンパイルエラーになるバグがある。
    • make_unsigned_tは12.0から

参照