Самые внутренние парсеры в вашем примере будут выражением, а в C ++ грамматика определяет expression
как assignment-expression
или другой expression
, за которым следует запятая, а другая assignment-expression
(Приложение A.4 - Грамматика / Выражения).
Грамматика далее определяет assignment-expression
как один из нескольких других типов выражения, ни один из которых не может быть ничем (или только пропуском).
So причина, по которой вы не можете A a(())
, просто потому, что грамматика не позволяет этого. Тем не менее, я не могу ответить, почему люди, которые создали C ++, не позволяли этому конкретному использованию пустых парнеров как своего рода особый случай - я бы предположил, что они предпочли бы не вставлять такой особый случай, если бы разумная альтернатива.