expected_unexpect_t

expected_unexpect_t (오류 값 생성 태그)

unexpect_tstd::expected의 오류 값 타입을 제자리에서 생성할 때 사용하는 태그 타입이에요. unexpect라는 인라인 상수 객체를 통해 사용하며, C++23부터 <expected> 헤더에서 제공돼요. 이 태그를 사용하면 임시 객체 없이 오류 값을 직접 구성할 수 있어서 효율적이에요.

출처: cppreference

본문

<expected> 헤더에 다음과 같이 정의되어 있어요.

Defined in header <expected>
struct unexpect_t { explicit unexpect_t() = default; }; (1) (since C++23)
inline constexpr std::unexpect_t unexpect{}; (2) (since C++23)

(1)은 unexpect_t 타입 자체의 정의이고, (2)는 이 타입의 인라인 상수 객체 unexpect를 정의해요. unexpect_t는 명시적 기본 생성자를 가지므로 unexpect_t{}처럼 직접 초기화해야 해요.

Notes

다른 생성 태그 타입들과 마찬가지로 unexpect_t는 사소한(trivial) 빈 클래스예요. 명시적 기본 생성자를 갖고 있어서 암시적 변환이 불가능하며, 항상 의도적으로 태그를 전달해야 해요. 이 태그를 사용하면 std::expected<T, E>E 타입 값을 임시 객체 없이 바로 생성할 수 있어서, 이동 전용 타입이나 비복사 타입도 효율적으로 다룰 수 있어요.

예를 들어 다음과 같이 사용할 수 있어요.

std::expected<int, std::string> e(std::unexpect, "error occurred");

See also

(constructor) expected 객체를 생성해요 (공개 멤버 함수)
in_place, in_place_type, in_place_index, in_place_t, in_place_type_t, in_place_index_t (C++17) 제자리 생성 태그

더 알아보기 (Learn more)

cppreference