Я столкнулся с некоторым кодом на С++, который выглядит следующим образом:
class exception {};
int main()
{
try {
throw exception();
} catch (exception()) {
// ...
}
}
Обратите внимание на дополнительный набор круглых скобок в catch (exception())
. Согласно Compiler Explorer, он скомпилирован в один и тот же объектный код, как если бы он был написан с помощью catch (exception &)
.
На каком основании разрешен дополнительный набор круглых скобок и какая часть стандарта позволяет это? Насколько мне известно, предложение catch
требует спецификатора типа, но exception()
не похоже на спецификатор типа.