실패 성격 분류
파일 없음, 입력 오류, 메모리 부족, precondition 위반을 같은 방식으로 다루지 않는다.
recoverable 실패만 호출자에게 올린다
예외를 쓰느냐 return code를 쓰느냐는 취향 문제가 아니다. 호출자가
복구할 수 있는 실패인지, 스택을 건너뛰어도 RAII로 자원이 정리되는지,
noexcept, C ABI, thread entry 밖으로 예외를 흘려도
되는지가 함께 결정되어야 한다.
파일 없음, 입력 오류, 메모리 부족, precondition 위반을 같은 방식으로 다루지 않는다.
recoverable 실패만 호출자에게 올린다
lock_guard, file handle, socket, memory가 스택 해제
중 RAII 객체로 정리되는지 본다.
실패 후 상태가 그대로인지 strong, 유효하지만 바뀔 수 있는지 basic, 던지지 않는지 nothrow를 정한다.
copy-and-swap으로 rollback 지점을 만든다
스레드 시작점, C API, 소멸자, 이벤트 콜백에서는 예외를 잡아 error
code, 로그, exception_ptr로 바꾼다.
던지는 타입, noexcept 여부, 복구 전략, 호출자 책임을
API 문서에 남긴다.
std::expected나 error code가 명확하다.
noexcept 함수, C ABI, destructor에서
예외를 잡아야 한다.
catch가 재시도·대체값·상위 전파 중 하나를
책임지는지 본다.
close, unlock,
delete가 소유 객체로 흡수됐는지 확인한다.
noexcept 경계에서 예외가
error code나 exception_ptr로 변환되는지 본다.