Partage

auto comme argument de fonction

Sujet résolu
17 août 2018 à 2:09:38

Bonjour,

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 !

Vous êtes demandeur d'emploi ?
Sans diplôme post-bac ?

Devenez Développeur web junior

Je postule
Formation
en ligne
Financée
à 100%
17 août 2018 à 4:41:08

-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.

17 août 2018 à 9:04:49

Cf https://en.cppreference.com/w/cpp/experimental/constraints#Abbreviated_templates 

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)

Pour poser des questions ou simplement discuter informatique, vous pouvez rejoindre le discord NaN.

auto comme argument de fonction

× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
  • Editeur
  • Markdown