Namespaces
Variants

std:: unexpected

From cppreference.net
헤더 파일에 정의됨 <exception>
void unexpected ( ) ;
(C++11까지)
[ [ noreturn ] ] void unexpected ( ) ;
(C++11에서 사용 중단됨)
(C++17에서 제거됨)

std::unexpected() 는 C++ 런타임이 동적 예외 명세(dynamic exception specification) 를 위반했을 때 호출됩니다: 이 함수의 예외 명세가 해당 유형의 예외를 금지하는 함수에서 예외가 발생한 경우입니다.

std::unexpected() 는 프로그램에서 직접 호출될 수도 있습니다.

어떤 경우든, std::unexpected 는 현재 설치된 std::unexpected_handler 를 호출합니다. 기본 std::unexpected_handler std::terminate 를 호출합니다.

만약 소멸자가 스택 풀기(stack unwinding) 도중 unexpected 핸들러를 재설정하고, 이후 풀기 과정에서 unexpected 가 호출되게 되면, throw 표현식 끝에 설치된 핸들러가 호출된다 (참고: 재던지기(re-throwing)가 새로운 핸들러를 적용하는지 여부는 모호했다).

(C++11까지)

만약 소멸자가 스택 풀기(stack unwinding) 도중 unexpected 핸들러를 재설정하면, 이후 풀기 과정에서 unexpected 가 호출될 때 어떤 핸들러가 호출되는지 명시되지 않는다.

(C++11부터)

예외

현재 설치된 std::unexpected_handler 가 던지는 모든 예외를 throw합니다.

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 2111 C++11 스택 풀기 중 std::set_unexpected 호출의 효과가
C++98과 다르며 일부 ABI를 깨뜨림
미지정으로 변경

참고 항목

(C++23)
예상치 못한 값으로 표현됨
(클래스 템플릿)
(C++11에서 사용 중단됨) (C++17에서 제거됨)
std::unexpected 에 의해 호출되는 함수의 타입
(typedef)