Проблема с вашим вторым объявлением заключается в том, какое значение следует использовать в качестве идентификатора?Это должно быть param
или SomeType
?Из-за круглых скобок первая часть объявления будет проанализирована первой, но если это так, и SomeType
не был идентификатором, то в какой момент при синтаксическом анализе идентификатор получает имя?
Использование шаблона синтаксического разбора по часовой стрелке в C / C ++, где идентификатором является самый неизвестный анализируемый элемент (т.е. что-то, что не является известным токеном или ключевым словом ... см. Ссылку), синтаксискак
(SomeType[size])& param
будет читать «SomeType - это массив фиксированного размера, который является типом ссылочного типа для некоторого объекта param
», что, конечно, не имеет никакого смысла, так как массив не имеетбыл объявлен с типом объекта, который является массивом.С другой стороны,
SomeType(¶m)[size]
, использующий те же правила синтаксического анализа, будет читать «param
- это ссылка на массив фиксированного размера, который содержит объекты типа SomeType
».Последнее, конечно, объявление, которое вы хотите, и что имеет смысл для синтаксического анализатора C / C ++.