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>::value가 true일 때만 오버로드 해석에 참여해요. 그래서 이 형질을 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; 같은 문법이 동작해요.