Какие требования предъявляет стандарт к типу, добавленному в исключение? - PullRequest
1 голос
/ 28 июля 2011

Я думал, что исключения наложили немного больше на тип броска, чем на самом деле навязывает стандарт. Я хочу устранить эту путаницу. Что на самом деле навязывается этим типам?

1 Ответ

4 голосов
/ 28 июля 2011

Спецификация ISO C ++, §15.1 / 3, гласит, что

Тип выражения броска не должен быть неполным типом или указателем или ссылкой на неполный тип, кромеvoid *, const void *, volatile void * или const volatile void *.За исключением этих ограничений и ограничений на сопоставление типов, упомянутых в 15.3, операнд throw обрабатывается в точности как аргумент функции в вызове (5.2.2) или операнд оператора return.

Исходя из этого, кажется, что вы должны иметь возможность выбрасывать все что угодно, если только вы не выбрасываете тип, который вы только объявили вперед.

РЕДАКТИРОВАТЬ : Как указывает @Billy ONeal, тип должен быть копируемым, что означает, что он должен поддерживать конструктор копирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...