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.