• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    class template
    <type_traits>

    std::make_unsigned

    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: 4.4.7
    • Visual C++: 2010 , 2012 , 2013 , 2015
      • 2010は、cv修飾修飾されている型において、コンパイルエラーになるバグがある。
      • make_unsigned_tは2013から

    参照