c++ gcc auto c++14 gcc4.9

c++ - ¿Auto como parámetro en una función regular es una extensión GCC 4.9?



c++14 gcc4.9 (2)

gcc 4.9 permite el siguiente código, pero gcc 4.8 y clang 3.5.0 lo rechazan.

void foo(auto c) { std::cout << c.c_str(); }

Recibo una warning: ISO C++ forbids use of ''auto'' in parameter declaration [-Wpedantic] en 4.9 pero en 4.8 y clang recibo un error: parameter declared ''auto'' .


Esto es Concepts Lite habla por

template<class T> void foo(T c) { std::cout << c.c_str(); }

El auto simplemente reemplaza la template<class T> más detallada template<class T> . Del mismo modo, puedes escribir

void foo(Sortable c)

como una abreviatura de

template<class T> requires Sortable<T>{} void foo(T c)

Aquí, Sortable es un concepto, que se implementa como una conjunción de predicados constexpr que formalizan los requisitos en el parámetro de plantilla. La comprobación de estos requisitos se realiza durante la búsqueda de nombres.

En este sentido, auto es una plantilla completamente sin restricciones.


Sí, esta es una extensión. Es probable que se agregue a C ++ 17 como parte de la propuesta de "conceptos", creo.