有没有办法将auto作为参数传递给另一个函数?
int function(auto data)
{
//DOES something
}
Run Code Online (Sandbox Code Playgroud) gcc 4.9允许使用以下代码,但gcc 4.8和clang 3.5.0拒绝它.
void foo(auto c)
{
std::cout << c.c_str();
}
Run Code Online (Sandbox Code Playgroud)
我进入warning: ISO C++ forbids use of 'auto' in parameter declaration [-Wpedantic]4.9但是在4.8和clang我得到error: parameter declared 'auto'.
我注意到我似乎无法像我期望的缩写函数模板那样使用默认参数。
\n#include <iostream>\n\nauto f(const auto x = 0) {\n return x + sizeof(x);\n}\n\nint main() { \n std::cout << f() << std::endl; // << broken\n std::cout << f(0) << std::endl;\n std::cout << f(short(8470)) << std::endl;\n}\nRun Code Online (Sandbox Code Playgroud)\n这是什么原因呢?
\n我的猜测是,模板机制从不考虑默认参数,所以我们得到了这种荒谬的情况,我可以定义一个看起来像默认值的模板化函数T=int(T隐藏模板类型在哪里),但似乎没有办法在不手动的情况下调用它指定类型:( f<int>())。
这主要是语言琐事,我不认为这是一个真正的问题,但函数模板没有int默认模板类型确实看起来很奇怪\xe2\x84\xa2。