std::is_error_code_enum

std::is_error_code_enum (오류 코드 열거 특성)

어떤 타입이 오류 코드 열거(ErrorCodeEnum)로 취급될 수 있는지를 판정하는 형질이에요. 기본값은 false이고, 특수화로 true를 표시해 열거를 error_code에 자동 변환하게 해요. C++11부터 있어요.

출처: cppreference

본문

<system_error> 헤더에 정의돼 있고, 오류 코드 열거 판정 형질이에요.

template< class T >
struct is_error_code_enum : std::false_type {};

std::error_code의 템플릿 생성자는 std::is_error_code_enum<T>::valuetrue일 때만 오버로드 해석에 참여해요. 그래서 이 형질을 true로 특수화하면 해당 열거 타입을 std::error_code에 암시적으로 변환할 수 있어요.

표준 라이브러리는 다음에 대해 이 형질을 특수화해요.

  • std::errc — POSIX 오류 도메인 (→ 자동으로 make_error_code 호출).
  • std::io_errc — I/O 오류 도메인.
  • std::future_errc — 비동기 오류 도메인.

사용자 정의 오류 코드 열거를 만들려면 이 형질을 특수화하고 해당 타입에 대한 make_error_code 오버로드를 제공해요.

#include <system_error>

// (표준) std::errc는 자동으로 error_code로 변환 가능
std::error_code ec = std::errc::invalid_argument;

// 사용자 정의 예시
enum class my_err { e_bad = 1 };
namespace std {
    template <> struct is_error_code_enum<my_err> : true_type {};
}
std::error_code make_error_code(my_err e); // 제공 필요

이 형질이 true_type이면 std::error_code ec = my_enum_value; 같은 문법이 동작해요.

더 알아보기 (Learn more)

cppreference