Is auto as a parameter in a regular function a GCC 4.9 extension?
Solution 1:
Yes, this is an extension. It's likely to be added to C++17 as part of the 'concepts' proposal, I believe.
Solution 2:
This is Concepts Lite speak for
template<class T>
void foo(T c)
{
std::cout << c.c_str();
}
The auto
just replaces the more verbose template<class T>
. Similarly, you can write
void foo(Sortable c)
as a shorthand for
template<class T>
requires Sortable<T>{}
void foo(T c)
Here, Sortable
is a concept, which is implemented as a conjunction of constexpr
predicates that formalize the requirements on the template parameter. Checking these requirements is done during name lookup.
In this sense, auto
is a completely unconstrained template.