Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::underlying_type

      From cppreference.com
      <cpp‎ |types
       
       
      Metaprogramming library
      Type traits
      Type categories
      (C++11)
      (C++11)(DR*)
      (C++11)
      (C++11)
      (C++11)
      (C++11)
      (C++11)
      (C++11) 
      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
      Type transformations
      (C++11)(deprecated in C++23)
      (C++11)(deprecated in C++23)
      (C++11)
      (C++11)(until C++20*)(C++17)

      underlying_type
      (C++11)
      (C++11)
      (C++17)
      Compile-time rational arithmetic
      Compile-time integer sequences
       
      Defined in header<type_traits>
      template<class T>
      struct underlying_type;
      (since C++11)

      IfT is a complete enumeration (enum) type, provides a member typedeftype that names the underlying type ofT.

      Otherwise, the behavior is undefined.

      (until C++20)

      Otherwise, ifT is not an enumeration type, there is no membertype. Otherwise (T is an incomplete enumeration type), the program is ill-formed.

      (since C++20)

      If the program adds specializations forstd::underlying_type, the behavior is undefined.

      Contents

      [edit]Member types

      Name Definition
      type the underlying type ofT

      [edit]Helper types

      template<class T>
      using underlying_type_t=typename underlying_type<T>::type;
      (since C++14)

      [edit]Notes

      Eachenumeration type has anunderlying type, which can be

      1. Specified explicitly (both scoped and unscoped enumerations);
      2. Omitted, in which case it isint for scoped enumerations or an implementation-defined integral type capable of representing all values of the enum (for unscoped enumerations).

      [edit]Example

      Run this code
      #include <iostream>#include <type_traits> enum e1{};enumclass e2{};enumclass e3:unsigned{};enumclass e4:int{}; int main(){constexprbool e1_t=std::is_same_v<std::underlying_type_t<e1>,int>;constexprbool e2_t=std::is_same_v<std::underlying_type_t<e2>,int>;constexprbool e3_t=std::is_same_v<std::underlying_type_t<e3>,int>;constexprbool e4_t=std::is_same_v<std::underlying_type_t<e4>,int>; std::cout<<"underlying type for 'e1' is "<<(e1_t?"int":"non-int")<<'\n'<<"underlying type for 'e2' is "<<(e2_t?"int":"non-int")<<'\n'<<"underlying type for 'e3' is "<<(e3_t?"int":"non-int")<<'\n'<<"underlying type for 'e4' is "<<(e4_t?"int":"non-int")<<'\n';}

      Possible output:

      underlying type for 'e1' is non-intunderlying type for 'e2' is intunderlying type for 'e3' is non-intunderlying type for 'e4' is int

      [edit] Defect reports

      The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

      DRApplied toBehavior as publishedCorrect behavior
      LWG 2396C++11incomplete enumeration types were allowedcomplete enumeration type required

      [edit]See also

      (C++11)
      checks if a type is an enumeration type
      (class template)[edit]
      checks if a type is a scoped enumeration type
      (class template)[edit]
      converts an enumeration to its underlying type
      (function template)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/types/underlying_type&oldid=152571"

      [8]ページ先頭

      ©2009-2025 Movatter.jp