std::is_error_code_enum
std::is_error_code_enum (std::io_errc 특수화)
std::is_error_code_enum<std::io_errc> 특수화예요. std::io_errc 값이 오류 코드를 보관하는 열거임을 알려줘, std::error_code 객체로 암시적으로 변환·대입 가능하게 해요. C++11부터 있어요.
출처: cppreference
본문
<ios> 헤더에 정의돼 있어요.
template<>
struct is_error_code_enum<std::io_errc> : public std::true_type {};
std::is_error_code_enum의 이 특수화는 std::io_errc 타입의 값이 오류 코드를 보관하는 열거임을 다른 라이브러리 구성 요소에 알려줘, 그 값이 std::error_code 타입 객체로 암시적으로 변환·대입 가능하게 해요.
std::integral_constant에서 상속
- value [static] —
true. - operator bool — 객체를 bool로 변환,
value반환. - operator() (C++14) —
value반환. - value_type —
bool, type —std::integral_constant<bool, value>.
예제
e.code()와 std::io_errc::stream의 비교는 std::is_error_code_enum<std::io_errc>::value == true이므로 컴파일돼요.
#include <fstream>
#include <iostream>
int main()
{
std::ifstream f("doesn't exist");
try
{
f.exceptions(f.failbit);
}
catch (const std::ios_base::failure& e)
{
if (e.code() == std::io_errc::stream) // 암시적 변환 덕분에 성립
std::cout << "stream error\n";
}
}