Encontré el siguiente código:
template <typename T, typename T1> auto compose(T a, T1 b) -> decltype(a + b) {
return a+b;
}
Hay una cosa que no puedo entender:
¿Dónde podría averiguar qué significa el operador de flecha ( ->) en el encabezado de la función? Supongo, lógicamente, que el ->operador determina un tipo, que autose deducirá, pero quiero aclararlo. No puedo encontrar ninguna información.

Respuestas:
En C ++ 11, hay dos sintaxis para la declaración de función:
declaraciones de argumento de identificador de tipo de retorno
(...)y
autoidentificador(argumento-declaraciones ...)->return_typeSon equivalentes Ahora, cuando son equivalentes, ¿por qué quieres usar este último? Bueno, C ++ 11 introdujo esta
decltypecosa genial que te permite describir el tipo de expresión. Por lo tanto, es posible que desee derivar el tipo de retorno de los tipos de argumento. Entonces intentas:y el compilador le dirá que no sabe qué
aybestá en eldecltypeargumento. Esto se debe a que solo los declara la lista de argumentos.Puede solucionar el problema fácilmente utilizando
declvallos parámetros de plantilla que ya están declarados. Me gusta:excepto que ahora se está volviendo muy detallado. Entonces se propuso e implementó la sintaxis de declaración alternativa y ahora puede escribir
y es menos detallado y las reglas de alcance no tuvieron que cambiar.
Actualización de C ++ 14: C ++ 14 también permite solo
autoidentificador(argumento-declaraciones ...)siempre que la función esté completamente definida antes de su uso y todas las
returndeclaraciones se deduzcan al mismo tipo. La->sintaxis sigue siendo útil para las funciones públicas (declaradas en el encabezado) si desea ocultar el cuerpo en el archivo fuente. Obviamente, eso no se puede hacer con las plantillas, pero hay algunos tipos concretos (generalmente derivados de la metaprogramación de plantillas) que son difíciles de escribir de otra manera.fuente
C++14cuando usoautoparareturnescribir en dicha función sin la necesidad de la-> decltype(a + b)parte? ¿Es redundante en este momento o tiene otros casos en los que todavía debería usarse? o es una extensión específica del compilador?auto, sin la->notación, siempre que la función esté completamente definida antes de su uso y todas lasreturndeclaraciones se deduzcan al mismo tipo. La->notación sigue siendo útil si desea utilizar la deducción para la función pública mientras oculta el cuerpo en el archivo fuente.En inglés simple dice que el tipo de retorno es el tipo inferido de la suma de
ayb.fuente