2 votes

Les types abstraits peuvent-ils être utilisés comme type de retour d'une fonction virtuelle pure ?

Si je comprends bien, les types abstraits ne peuvent pas être utilisés comme type de retour d'une fonction virtuelle pure. Cependant, si un type de retour est utilisé, alors gcc (mais pas clang) accepte le code suivant :

struct S {
    virtual auto f() -> S = 0; 
};

démo .

S'agit-il d'un bogue de gcc, ou le langage n'exige-t-il pas qu'un diagnostic soit émis pour ce code ?

2voto

Brian Points 15388

Selon C++17 [class.abstract]/3, un type abstrait ne peut pas être utilisé comme type de retour d'une fonction :

Une classe abstraite ne doit pas être utilisée comme type de paramètre, comme type de retour de fonction ou comme type de conversion explicite. Les pointeurs et les références à une classe abstraite peuvent être déclarés. [ Exemple :

shape x;           // error: object of abstract class
shape* p;          // OK
shape f();         // error
void g(shape);     // error
shape& h(shape&);  // OK

- exemple de fin ]

Il ne semble pas y avoir d'exception pour les fonctions virtuelles pures. Par conséquent, il semble que la réponse soit que le compilateur est tenu d'émettre un diagnostic pour votre code.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X