C++:为什么函数的参数不能自动?

sqd*_*sqd 6 c++ templates c++11

例如,以下代码将不被接受

void foo(auto i){
    cout<<(i+1);
}
Run Code Online (Sandbox Code Playgroud)

我认为它应该等同于以下公认的代码

template<typename T>
void foo(T i){
    cout<<(i+1);
}
Run Code Online (Sandbox Code Playgroud)

因此编译器应该能够推导(或实例化)参数的类型.但为什么它不起作用?

多谢 :-)