Могу ли я использовать именованные параметры в аргументе типа подписи шаблона std:: function?

Могу ли я юридически использовать имена для параметров шаблона в std::function (или другой аналогичной конструкции)? Например. с учетом кода

std::function<int(int, int)> some_func;

Можно ли переписать его следующим образом?

std::function<int(int begin, int end)> some_func;

Было бы очень приятно, если бы оно было стандартным, потому что только этот тип содержит небольшую информацию о цели этого параметра.

До сих пор я тестировал его в Visual Studio 2013, и он работает. Изменить: он также работает с gcc 4.8.1.

Ответы

Ответ 1

Да, вы можете указать имя параметра. Из пункта 8.3.5/11 стандарта С++ 11:

Идентификатор может быть необязательно представлен как имя параметра;

То же самое относится к типу функции "указатель-к-функции" и "указатель-к-член". Лично я бы использовал идентификатор, только если он более четко выражает намерение вашего кода.

Ответ 2

Для юристов языка:

Грамматика этого допускает. Является ли это преднамеренным, неясно мне. Объявление и абстрактно-декларатор отличаются тем, что последний не позволяет имя на верхнем уровне.

описатель:

  • PTR-описатель
  • noptr-declarator parameters-and-qualifiers trailing-return-type

PTR-описатель:

  • noptr-описатель
  • ptr-operator ptr-declarator

noptr-описателя:

  • declarator-id attribute-specifier-seq (opt)
  • noptr-declarator parameters-and-qualifiers
  • noptr-declarator [ константа-выражение (opt) ] attribute-specifier-seq (opt)
  • ( ptr-declarator )

Обратите внимание, что в деклараторе вы можете иметь идентификатор-декларатор, то есть имя. Теперь рассмотрим синтаксис abstract-declarator:

абстрактный-описатель:

  • PTR-абстрактно-описатель
  • noptr-abstract-declarator (opt) параметры и квалификаторы trailing-return-type
  • абстрактно-пак-описатель

PTR-абстрактно-описатель:

  • noptr-абстрактно-описатель
  • ptr-operator ptr-abstract-declarator (opt)

noptr-абстрактного-описатель:

  • noptr-abstract-declarator (opt) параметры и квалификаторы
  • noptr-abstract-declarator (opt) [ константа-выражение (opt) ] attribute-specifier-seq (opt)
  • ( ptr-abstract-declarator )

Абстракт-декларатор не может содержать идентификатор объявления на верхнем уровне. Однако обратите внимание, что параметры и квалификаторы, которые встречаются в правилах создания для абстрактного-декларатора и noptr-abstract-declarator, такие же, как в declarator и noptr-declarator. Для абстрактного-декларатора нет специальных абстрактных-параметров-и-квалификаторов для обеспечения отсутствия имени в списке параметров. Таким образом, грамматика позволяет определять имена для параметров функции внутри абстрактных деклараторов, даже если общий тип функции не может быть присвоен имени.