Нет просветленного ответа, это просто потому, что он не определен как корректный синтаксис языка C ++ ... Так оно и есть, по определению языка.
Если у вас есть выражение внутри то оно действительно. Например:
((0));//compiles
Еще проще: потому что (x)
является допустимым выражением C ++, а ()
- нет.
Чтобы узнать больше о том, как определяются языки и как работают компиляторы, вы должны узнать о теории формальных языков или более конкретно Контекст-бесплатные грамматики (CFG) и родственные материалы, такие как машины с конечным состоянием. Если вас это интересует, хотя страниц в википедии недостаточно, вам нужно будет получить книгу.