Question

La déduction de type retour est-elle autorisée pour les fonctions des membres dans C ++ 14, ou uniquement pour les fonctions libres?

Je demande parce que je suppose implicitement que cela fonctionnerait, mais dans GCC 4.8.1, j'obtiens une erreur de compilateur interne ("dans gen_type_die_with_usage"). La première fois que j'ai eu une telle erreur cryptique comme ça, donc je suis un peu sceptique; Et je sais qu'ils ont changé la spécification depuis lors.

Pour plus de clarté, cela fonctionne pour moi:

auto foo() {return 5;}

Mais ce n'est pas le cas:

class Bar{
auto baz() {return 5;}
}

Est-ce autorisé dans la norme de projet?

Était-ce utile?

La solution

Oui, la norme devrait le permettre en fonction du journal N3582. Voici un exemple du papier.

Autoriser les déclarations de fonctions non définies avec le type de retour automatique n'est pas strictement nécessaire, mais il est utile pour les styles de codage qui préfèrent définir les fonctions des membres en dehors de la classe:

    struct A {
      auto f(); // forward declaration
    };
    auto A::f() { return 42; }

Et si nous le permettons dans cette situation, cela devrait également être valable dans d'autres situations. L'autoriser également le choix le plus orthogonal; En général, je crois que si la combinaison de deux fonctionnalités peut fonctionner, cela devrait fonctionner.

Selon le commentaire de @Bamboon, "la déduction de type retour n'est prise en charge que de GCC 4.9". Cela expliquerait donc pourquoi vous ne l'avez pas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top