Так указывается язык, здесь имена типов должны быть заключены в скобки.
Предположим, грамматика выглядела так:
sizeof <i>unary-expression</i>
sizeof <i>type-name</i>
Теперь, например, следующее выражение будет неоднозначным:
sizeof int * + 0
Это может быть либо sizeof(int *) + 0
, либо sizeof(int) * +0
. Эта двусмысленность не возникает для унарных выражений, поскольку звездочка, добавляемая к выражению, не является выражением (но для некоторых имен типов, добавление одного снова является именем типа).
Что-то нужно было указать здесь, и требование заключить в скобки имена типов - способ решить эту двусмысленность.