C ++ 20允许将auto
用于功能参数类型。
是否还允许将auto
用作函数参数类型的模板参数占位符(不相似,但以C++17 template<auto>的精神)?
因此,下面的代码在C ++ 20之前:
template<typename First, typename Second>
void printPair(const std::pair<First, Second>& p) {
std::cout << p.first << ", " << p.second;
}
可以写为:
void printPair(const std::pair<auto, auto>& p) {
std::cout << p.first << ", " << p.second;
}
does compile and works nicely具有实验性GCC实施概念。
在C ++ 20中是合法语法吗?
auto
的A
placeholder-type-specifier可以用作函数参数中的decl-specifier s是参数声明开始处的关键字和类型名称的初始序列。上面的规则允许decl-specifier-seq]的decl-specifier函数声明或lambda-expression的parameter-declaration的>,如果不是
((如果您在撰写本文时检查了最新工作草案中的措辞,您会发现一条稍有不同的规则。上述规则已由core issue 2447修改,并在[]中被选入C ++ 20最终草案。一周前的布拉格委员会会议。)auto
type-specifier,则引入trailing-return-type (请参见下文)是函数声明或lambda-expression的通用参数类型占位符。 [注意:具有通用参数类型占位符表示该函数是缩写的函数模板(9.3.3.5 [dcl.fct])或lambda是通用lambda(7.5.5 [expr.prim.lambda])。 —尾注]
auto
位于顶层:void f(auto x);
...,但仅作为decl-specifier。当嵌套在
decl-specifier:中时,不允许
auto
void f(std::vector<auto> x);
void f(void (*p)(auto));