最終更新日時: 2024年06月11日 22時45分38秒 (JST)
Akira Takahashi が更新

履歴 編集

function template
<utility>

# std::to_underlying(C++23)

    namespace std {
      template <class T>
      constexpr underlying_type_t<T> to_underlying(T value) noexcept; // C++23
    }

## 概要

列挙型`T`の値を基底型に変換する。

列挙型は`enum class E : int { … };`のようにコロンのあとに基底型を指定でき、指定しない場合の基底型はすべての列挙値を表現できる整数型となる。この関数では、列挙値を基底型に変換する。

## 戻り値

    return static_cast<underlying_type_t<T>>(value);

## 例

    #include <iostream>
    #include <utility>

    enum class Color : int {
      Red   = 0xff0000,
      Green = 0x00ff00,
      Blue  = 0x0000ff,
    };

    void print_color_value(int color) {
      std::cout << std::hex << std::showbase << color << std::endl;
    }

    int main() {
      print_color_value(std::to_underlying(Color::Blue));
    }

### 出力

    0xff

## バージョン

### 言語

- C++23

### 処理系

- GCC: 11.1 ✅
- Clang: 13.0 ✅
- Visual C++: ??

## 参照

- P1682R2 `std::to_underlying` for enumerations