具有自动返回类型的函数作为参数

时间:2016-06-07 10:19:34

标签: c++

这是不允许的,因为它包含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)
{
}

1 个答案:

答案 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不同。

C ++ 11中的函数参数不支持

auto自动类型推导。

但是,C ++ 14及更高版本支持auto用于lambda函数参数。本质上,这会在lambda类型中创建一个模板auto

你的例子

operator()

使用尾随返回类型语法来指定C ++ 03语法函数

void f( auto fp() -> int )
{}

由于衰减的函数类型用作形式参数类型,相当于

void f( int fp() )
{}

带有函数指针参数。