Является ли sizeof (int ()) допустимым выражением?

Этот вопрос вдохновленЯвляется ли sizeof (void ()) допустимым выражением? но с важным отличием, как описано ниже.

Выражение в вопросе:

sizeof( int() )

В грамматике C ++ появляется:

унарное выражение:

sizeof Унарное выражениеsizeof ( тип-идентификатор )

тем не мение,( int() ) может сопоставить оба этих случая с разными значениями:

КакУнарное выражение, это инициализированное значениеint prvalue, заключенный в лишние скобкиКактип-идентификатор, это тип функции без параметров, возвращаемыхint.

В семантических ограничениях дляsizeof, то есть C ++ 14 [expr.sizeof] / 1, это объясняет, что формаsizeof( тип-идентификатор ) не может применяться к типу функции.

Однако я не уверен, подразумевает ли нарушение этого семантического ограничения, чтоsizeof( int() ) правильно и используетsizeof Унарное выражение форма; или есть ли какое-то другое правило, которое устраняет неоднозначность двух случаев на более ранней стадии сопоставления грамматики.

NB. Для другого вопросаsizeof(void()), ни одна из интерпретаций не действительна, поэтому можно утверждать, что компилятор корректен, чтобы отклонить выражение с сообщением об ошибке, указывающим, что оно соответствуеттип-идентификатор форма. Тем не менее, GCC отклоняетsizeof( int() ) с сообщением отип-идентификатор.

Чтобы быть ясным, мой вопрос:sizeof( int() ) юридическое выражение? ", особенно о деталях того, как работает сопоставление грамматики, когда совпадают оба вышеупомянутых маркированных случая.

Ответы на вопрос(1)

Ваш ответ на вопрос