自动作为常规函数中的参数GCC 4.9扩展?
gcc 4.9允许下面的代码,但是gcc 4.8和clang 3.5.0拒绝它。
void foo(auto c) { std::cout << c.c_str(); }
我得到warning: ISO C++ forbids use of 'auto' in parameter declaration [-Wpedantic]
在4.9中,但在4.8和clang我得到error: parameter declared 'auto'
。
是的,这是一个扩展。 我相信这很可能会作为“概念”提案的一部分添加到C ++ 17中。
这是Concepts Lite所说的
template<class T> void foo(T c) { std::cout << c.c_str(); }
auto
取代更详细的template<class T>
。 同样,你可以写
void foo(Sortable c)
作为速记
template<class T> requires Sortable<T>{} void foo(T c)
在这里, Sortable
是一个概念,它作为constexpr
谓词的一个连接来实现,这个谓词forms化了模板参数的需求。 在名称查找期间检查这些要求。
从这个意义上说, auto
是一个完全不受约束的模板。