不明というか、auto以外で受けるのを禁止されているだけで、内部的にはちゃんと型を持ってるでしょ。

たとえば、

void hoge(auto func(int x)->int)
{
.....
}

こういう関数を作ったとして、f1は引数に渡せるけど、f2はエラーになるし、
f2を渡そうと思ったら、std::functionで受ける必要がある。