这是不允许的,因为它包含auto
:
void f(auto fp())
{
}
// error: 'auto' not allowed in function prototype
我们可以明确地使它成为一个函数指针并得到相同的错误:
void f(auto (*fp))
{
}
现在,如果我们给它一个尾随返回类型:
void f(auto fp() -> int)
{
}
现在好了。这是合法的,编译错误还是疏忽?
有趣的是,它不允许我将auto
函数指针作为参数。
// OK
void f(auto f(auto () -> int) -> int)
{
}
// Complain
void f(auto f(auto (*fp) -> int) -> int)
{
}
答案 0 :(得分:4)
plot(g, layout_nicely(g), asp=FALSE, vertex.shape=V(g)$shape, vertex.label.dist=0.3,
vertex.label.degree=-pi/2)
与用于指定追踪返回类型的auto
不同。
auto
自动类型推导。
但是,C ++ 14及更高版本支持auto
用于lambda函数参数。本质上,这会在lambda类型中创建一个模板auto
。
你的例子
operator()
使用尾随返回类型语法来指定C ++ 03语法函数
void f( auto fp() -> int )
{}
由于衰减的函数类型用作形式参数类型,相当于
void f( int fp() )
{}
带有函数指针参数。