Немного известная, но почти никогда не используемая функция С++ получает объявление:
void foo();
Одно возможное юридическое определение может быть:
void foo() try {
throw 42;
}
catch(...) {
}
Здесь завершена целая реализация функции внутри пары try
/catch
, которая, похоже, похожа на разрешение это.
Является ли это законным для int main()
? Например:.
int main() try {
throw 42;
}
catch(...) {
}
Правила для основного, n3290 § 3.6.1 в основном говорят о том, какие аргументы он должен принять и что он возвращает - они, похоже, явно не запрещают это они делают с различными другими странными вещами (например, связями), которые могут возникнуть при попытке попробовать.
Является ли это законным и четко определенным?