Bon finalement j'ai trouvé. Pour ceux qui se posent aussi la question, il s'agit de la nouvelle syntaxe C++11 de déclaration de fonctions, où le type de retour est indiqué après la flèche et le nom est précédé du mot clé auto.
Ici la déclaration de G::f est équivalente à
classG{public:voidf(){// ...}};
Comme le type de retour (nommé trailing return type) est indiqué après la fonction, il est interprété dans le contexte de la fonction. Par exemple (inspiré de cette source), si j'écris
classC{public:enumE{a,b,c};Ef();autog()->E;};
Je dois implémenter C::f en préfixant le type de retour avec le nom de la classe :
C::EC::f(){// ...}
Tandis que la nouvelle syntaxe m'épargne ce préfixe pour C::g :
autoC::g()->E{// ...}
Ici le type de retour est bien C::E, c'est à dire E interprété dans le contexte de C.
C'est super car j'ai économisé l'écriture de C:: au prix de l'écriture de auto -> ! Je ne me suis pas fait avoir...
En fait l'intérêt est surtout lié à l'arrivée de decltype. On peut ainsi déclarer le type de retour en fonction des entités apparaissant dans la signature de la fonction, comme dans l'exemple suivant :
Ici la fonction add retourne une valeur du même type que le résultat de operator+ sur les paramètres. Si T et U sont int, alors le type de retour est int ; si T est int et U est double, le type de retour est double.
[^] # Re: Syntaxe étonnante
Posté par Julien Jorge (site web personnel) . En réponse au journal C++Now 2014. Évalué à 10.
Bon finalement j'ai trouvé. Pour ceux qui se posent aussi la question, il s'agit de la nouvelle syntaxe C++11 de déclaration de fonctions, où le type de retour est indiqué après la flèche et le nom est précédé du mot clé
auto.Ici la déclaration de
G::fest équivalente àComme le type de retour (nommé trailing return type) est indiqué après la fonction, il est interprété dans le contexte de la fonction. Par exemple (inspiré de cette source), si j'écris
Je dois implémenter
C::fen préfixant le type de retour avec le nom de la classe :Tandis que la nouvelle syntaxe m'épargne ce préfixe pour
C::g:Ici le type de retour est bien
C::E, c'est à direEinterprété dans le contexte deC.C'est super car j'ai économisé l'écriture de
C::au prix de l'écriture deauto ->! Je ne me suis pas fait avoir...En fait l'intérêt est surtout lié à l'arrivée de
decltype. On peut ainsi déclarer le type de retour en fonction des entités apparaissant dans la signature de la fonction, comme dans l'exemple suivant :Ici la fonction
addretourne une valeur du même type que le résultat deoperator+sur les paramètres. SiTetUsontint, alors le type de retour estint; siTestintetUestdouble, le type de retour estdouble.Une troisième source sur le sujet.