catch는 위에서 아래로 검사하므로 좁은 타입을 먼저 둔다

먼저 만난 catch 하나만 실행된다. 부모 타입이 앞에 있으면 자식 타입 전용 복구가 닫힌다.

1 구체 예외invalid_argument처럼 원인이 분명한 타입
2 도메인 예외프로그램이 정의한 복구 가능한 타입
3 std::exception표준 예외의 공통 부모
4 catch(...)마지막 안전망
catch잡는 대상위치
invalid_argument잘못된 인자처럼 복구 방식이 뚜렷한 실패가장 위
CustomError업무 규칙에 맞춘 상세 예외표준 부모보다 위
std::exception표준 예외 공통 처리구체 타입 뒤
catch(...)타입을 모르는 모든 예외항상 마지막

핵심: catch 순서는 복구 정책이다. 넓은 타입일수록 아래에 둔다.