CatDVI может преобразовать DVI в текст и пытается сохранить форматирование.
Нет просвещенного ответа, это просто потому, что он не определен как допустимый синтаксис языком C ++ ... Так оно и есть, по определению языка.
Если у вас есть выражение внутри тогда действительно. Например:
((0));//compiles
Еще проще: потому что (x)
является допустимым выражением C ++, а ()
- нет.
Чтобы узнать больше о том, как определяются языки и как работают компиляторы, вы должны узнать о теории формального языка или, более конкретно, о контекстно-свободных грамматиках (CFG) и связанных материалах, таких как конечные государственные машины. Если вас это интересует, хотя страниц в Википедии будет недостаточно, вам понадобится книга.
The innermost parens in your example would be an expression, and in C++ the grammar defines an expression
to be an assignment-expression
or another expression
followed by a comma and another assignment-expression
(Appendix A.4 - Grammar summary/Expressions).
The grammar further defines an assignment-expression
as one of several other types of expression, none of which can be nothing (or only whitespace).
So the reason you can't have A a(())
is simply because the grammar doesn't allow it. However, I can't answer why the people who created C++ didn't allow this particular use of empty parens as some sort of special-case - I'd guess that they'd rather not put in such a special case if there was a reasonable alternative.