Exception Types as Simple Semantic Tags
↑[править править вики-текст]эффективно отделяет семантику неудачи от информации, которая имеет отношение к каждому отдельному случаю сообщения о неудаче с данным семантиком.
Другими словами: с повышением:Исключение, какие данные переносит данный объект исключения, зависит прежде всего от контекста, в котором сообщаются сбои (не от его типа). Поскольку типы исключений не нуждаются в членах, становится очень естественным выбрасывать исключения, которые происходят из более чем одного типа, чтобы указать несколько соответствующих семантик:
struct exception_base: virtual std::exception, virtual boost::exception { };
struct io_error: virtual exception_base { };
struct file_error: virtual io_error { };
struct read_error: virtual io_error { };
struct file_read_error: virtual file_error, virtual read_error { };
Используя этот подход, типы исключений становятся простой системой тегов для категоризации ошибок и выбора сбоев в обработчиках исключений.