Je sais que les lambdas le supportent, je sais que l'on peut faire sans.
Néanmoins, j'ai vu gbdivers l'écrire dans un post précédent, mais je ne trouve aucun papier proposant de mettre auto comme argument d'une fonction :
#include <iostream>
void f(auto a) {
std::cout << a << std::endl;
}
int main() {
f(5);
f(5.0);
return 0;
}
Clang refuse complètement ce code là, en revenche gcc l'accepte avec le warning comme quoi il faut activer -fconcepts. Faut il attendre que la norme du C++20 soit finalisé pour que ce genre de code soit légal (et qu'on aille pas en prison). Est ce que ça a un rapport avec les concepts (il nous les faut le plus rapidement possible ces machins là).
http://cpp-rendering.io : Vous trouverez tout ce dont vous avez besoin sur Vulkan / OpenGL et le rendu 3D !
-fconcepts correpond effectivement aux concepts de c++20. Actuellement, seul gcc propose une implémentation qui n'est pas forcement à jour par rapport au standard.
Je n'ai pas souvenir de l'avoir vu en paramètre de fonction, mais c'est une attente logique: il y a auto avec lambda, il y auto pour les valeurs de template, donc on s'attend aussi à l'avoir pour les fonctions. D'ailleurs, dans la forme simple, les concepts se substituent au type dans la déclaration des variable et auto est le concept le moins restrictive.
C'est effectivement une sorte de concept sans concept. Un concept qui n'impose pas de contrainte sur le type. Cela remplace un template anonyme.
void f1(auto a, auto* b);
// long form: template<typename T, typename U> f1(T a, U* b);
En pratique, c'est du typage faible. C'est un remplaçant de void* ou std::any dans le principe. Très probablement qu'aucune fonction n'accepte TOUS les types. Il est fort possible que dans les recommandations, l'utilisation de auto soit déconseillé. (Dans le cas des fonctions lambdas, utiliser auto en paramètre est moins grave, puisqu'elles sont sensées avoir une faible portée)
Discord NaN. Mon site.