Type traits | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Compile-time rational arithmetic | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Compile-time integer sequences | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(C++14) |
Defined in header <type_traits> | ||
template<class T> struct is_scoped_enum; | (since C++23) | |
std::is_scoped_enum
is aUnaryTypeTrait.
Checks whetherT
is ascoped enumeration type. Provides the member constantvalue
which is equal totrue, ifT
is a scoped enumeration type. Otherwise,value
is equal tofalse.
If the program adds specializations forstd::is_scoped_enum
orstd::is_scoped_enum_v
, the behavior is undefined.
Contents |
T | - | a type to check |
template<class T> constexprbool is_scoped_enum_v= is_scoped_enum<T>::value; | (since C++23) | |
value [static] | true ifT is a scoped enumeration type,false otherwise(public static member constant) |
operator bool | converts the object tobool, returnsvalue (public member function) |
operator() (C++14) | returnsvalue (public member function) |
Type | Definition |
value_type | bool |
type | std::integral_constant<bool, value> |
Feature-test macro | Value | Std | Feature |
---|---|---|---|
__cpp_lib_is_scoped_enum | 202011L | (C++23) | std::is_scoped_enum |
namespace detail{void test_conversion(...);// selected when E is complete and scopedvoid test_conversion(int)= delete;// selected when E is complete and unscoped template<class E>concept is_scoped_enum_impl=std::is_enum_v<E>&&// checked first requires{ detail::test_conversion(E{});};// ill-formed before overload resolution// when E is incomplete}// namespace detail template<class T>struct is_scoped_enum:std::bool_constant<detail::is_scoped_enum_impl<T>>{}; |
#include <type_traits> static_assert(std::is_scoped_enum_v<int>==false); class A{};static_assert(std::is_scoped_enum_v<A>==false); enum B{ self_test= std::is_scoped_enum_v<B>};static_assert(std::is_scoped_enum_v<B>==false);static_assert(!self_test); enumstruct C{ final, import, module};static_assert(std::is_scoped_enum_v<C>==true); enumclass D:int{ pre, post, override};static_assert(std::is_scoped_enum_v<D>==true); enumclass E;static_assert(std::is_scoped_enum_v<E>==true); int main(){}
(C++11) | checks if a type is an integral type (class template)[edit] |
(C++11) | checks if a type is an arithmetic type (class template)[edit] |
(C++11) | checks if a type is a scalar type (class template)[edit] |
(C++11) | checks if a type is an enumeration type (class template)[edit] |