Я не понимаю последнее предложение в [dcl.fct.default] / 3

[dcl.fct.default] / 3 (выделено мной ):

Аргумент по умолчанию должен быть указан только в предложении-объявления-параметра объявления функции или лямбда-декларатора или в параметре-шаблоне (14.1); в последнем случае предложение-инициализатора должно быть выражением-присваиванием. Аргумент по умолчанию не должен указываться для пакета параметров. Если он указан в предложении-объявлении-параметра, он не должен встречаться в деклараторе или абстрактном-деклараторе объявления-параметра.

В последнем предложении выше говорится, что если аргумент по умолчанию указан в предложении-объявлении-параметра, он не встречается в деклараторе или абстрактном-деклараторе объявления-параметра. Тем не менее, когда я смотрю определение объявления параметра, я нахожу следующее в [ dcl.fct] / 3 (выделено мной):

объявление-параметра:
спецификатор-атрибута-seqopt декларатор-спецификатор-SEQ
спецификатор-атрибута-seqopt спецификатор-декларации-seq declarator = предложение-инициализатора
спецификатор-атрибута- seqopt спецификатор-объявления-seq абстрактный-деклараторопт
спецификатор-атрибута-seqopt спецификатор-объявления-секвентальный-деклараторопт = предложение-инициализатора


person Alexander    schedule 23.05.2017    source источник


Ответы (1)


В Стандарте есть сноска.

102) Это означает, что аргументы по умолчанию не могут появляться, например, в объявлениях указателей на функции, ссылках на функции или объявлениях typedef.

Например, эти объявления

void f(void g(int = 10));

void ( *pf )(int = 10);

не правы.

person Vlad from Moscow    schedule 23.05.2017
comment
Я понял. Спасибо. - person Alexander; 23.05.2017