std :: function typedef中的参数名称

Emi*_*ier 3 c++ boost boost-function c++11 std-function

我知道我可以std::function这样输入:

typedef std::function<void (const std::string&)> TextChangedHandler
Run Code Online (Sandbox Code Playgroud)

是否允许在typedef中指定参数名称,以使其更加自我记录?例如:

typedef std::function<void (const std::string& text)> TextChangedHandler
Run Code Online (Sandbox Code Playgroud)

我可以添加参数名称,它在Visual C++ 2010上编译得很好,但我想确保它是C++ 03/C++ 11标准所允许的.

asc*_*ler 5

是.

这种指定函数类型而没有声明符来命名函数的形式在语法上是一个type-id(8.1):

type-id:
    type-specifier-seq abstract-declarator[opt]

abstract-declarator:
    ptr-operator abstract-declarator[opt]
    direct-abstract-declarator

direct-abstract-declarator:
    direct-abstract-declarator[opt] ( parameter-declaration-clause ) cv-qualifier-seq exception-specification
    direct-abstract-declarator[opt] [ constant-expression ]
    ( abstract-declarator )
Run Code Online (Sandbox Code Playgroud)

参数声明子句语法相同的普通函数声明,它允许每个参数要么有一个名称(说明符)否(抽象说明符)(8.3.5):

parameter-declaration-clause:
    parameter-declaration-list[opt] ...[opt]
    parameter-declaration-list[opt] , ...

parameter-declaration-list:
    parameter-declaration
    parameter-declaration-list , parameter-declaration

parameter-declaration:
    decl-specifier-seq declarator
    decl-specifier-seq declarator = assignment-expression
    decl-specifier-seq abstract-declarator[opt]
    decl-specifier-seq abstract-declarator[opt] = assignment-expression
Run Code Online (Sandbox Code Playgroud)