types_is_scoped_enum

types_is_scoped_enum (스코프 열거형 타입 판별)

std::is_scoped_enum은 주어진 타입 T가 스코프 열거형(scoped enumeration) 타입인지 컴파일 타임에 판별하는 UnaryTypeTrait예요. C++23부터 사용할 수 있고, Tenum class 또는 enum struct로 선언된 타입이라면 valuetrue가 되며, 그렇지 않으면 false가 돼요. 이 특성은 제네릭 코드에서 열거형의 종류에 따라 동작을 달리해야 할 때 유용하게 활용할 수 있어요.

출처: cppreference

본문

std::is_scoped_enum<type_traits> 헤더에 정의되어 있어요. 만약 프로그램에서 std::is_scoped_enum이나 std::is_scoped_enum_v에 대한 특수화를 추가하면 동작이 정의되지 않으니 주의해야 해요.

템플릿 매개변수

T - 확인할 타입

헬퍼 변수 템플릿

template < class T > constexpr bool is_scoped_enum_v = is_scoped_enum < T >:: value ; (C++23부터)

std::integral_constant에서 상속됨

멤버 상수

value [static] T가 스코프 열거형 타입이면 true, 아니면 false (공용 정적 멤버 상수)

멤버 함수

operator bool 객체를 bool로 변환하고 value를 반환해요 (공용 멤버 함수)
operator() (C++14) value를 반환해요 (공용 멤버 함수)

멤버 타입

Type Definition
value_type bool
type std :: integral_constant < bool , value >

참고 사항

Feature-test 매크로 표준 기능
__cpp_lib_is_scoped_enum 202011L (C++23) std::is_scoped_enum

가능한 구현

namespace detail { void test_conversion (...); // selected when E is complete and scoped void 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);

enum struct C { final, import, module };
static_assert(std::is_scoped_enum_v<C> == true);

enum class D : int { pre, post, override };
static_assert(std::is_scoped_enum_v<D> == true);

enum class E;
static_assert(std::is_scoped_enum_v<E> == true);

int main() {}

같이 보기

is_integral (C++11) 타입이 정수 타입인지 확인해요 (클래스 템플릿)
is_arithmetic (C++11) 타입이 산술 타입인지 확인해요 (클래스 템플릿)
is_scalar (C++11) 타입이 스칼라 타입인지 확인해요 (클래스 템플릿)
is_enum (C++11) 타입이 열거형 타입인지 확인해요 (클래스 템플릿)
is_scoped_enum_type (C++26) 리플렉션이 스코프 열거형 타입을 나타내는지 확인해요 (함수)

더 알아보기 (Learn more)

cppreference