C ++ 20 permite usar el autotipo de parámetro de función.
¿También permite usar autocomo un marcador de posición de argumento de plantilla (no similar, pero en el espíritu de la plantilla C ++ 17 <auto> de alguna manera) para el tipo de parámetro de función?
Entonces, el siguiente código, pre C ++ 20:
template<typename First, typename Second>
void printPair(const std::pair<First, Second>& p) {
std::cout << p.first << ", " << p.second;
}
Podría escribirse como:
void printPair(const std::pair<auto, auto>& p) {
std::cout << p.first << ", " << p.second;
}
Se hace de compilación y funciona muy bien con la implementación experimental para GCC conceptos.
¿Es una sintaxis legítima con C ++ 20?

autose traduce directamente en plantillatypename XYZ, lo que implicaría que es la sintaxis legítima. Aseado .autoestá permitido[](const std::pair<auto, auto>& p){}(ya sea con-std=c++2ao-std=c++17).Respuestas:
Esta sintaxis es válida en la Especificación técnica de conceptos de C ++, pero no en C ++ 20. En los conceptos de C ++ 20,
autosolo se permite en el nivel superior en un tipo de parámetro de función. La regla relevante es [dcl.spec.auto] párrafo 2 :(Si marca la redacción en el borrador de trabajo más reciente al momento de escribir, encontrará una regla algo diferente. La regla anterior fue modificada por el tema central 2447 , que fue votado en el borrador final de C ++ 20 en Praga reunión del comité hace una semana.)
Los especificadores de declinación en un parámetro de función son la secuencia inicial de palabras clave y nombres de tipo al comienzo de la declaración del parámetro. La regla anterior permite
autoallí en el nivel superior:... pero solo como un especificador de declinación .
autono está permitido cuando está anidado dentro de un especificador de declinación :... y tampoco está permitido en otra parte del tipo de parámetro:
fuente
autoun tipo de retorno final contaban como este tipo deautouso.