Au début, au paragraphe 9.3.4.6 [dcl.fct], le paragraphe 9 exigeait que
Le type d'un paramètre ou le type de retour pour une définition de fonction ne doit pas être un type de classe incomplète (éventuellement qualifié cv) sauf si la définition de la fonction est imbriquée dans la spécification des membres de cette classe (y compris les définitions dans les classes imbriquées définies à l'intérieur de la classe).
Un rapport de défaut a été soulevé, et une résolution ultérieure proposée et appliquée rétroactivement (mes soulignements):
Les types ne doivent pas être définis dans les types de retour ou de paramètre. Le type d'un paramètre ou le type de retour pour une définition de fonction ne doit pas être un type de classe incomplète (éventuellement qualifié cv) à moins que la fonction ne soit supprimée (9.5.3 [dcl.fct.def.delete]) ou que la définition soit imbriquée dans la spécification des membres de cette classe (y compris les définitions dans les classes imbriquées définies à l'intérieur de la classe).
Par conséquent, Clang a tort.
0 votes
Est-ce que cela répond à votre question? Les utilisations de types incomplets doivent-elles être diagnostiquées?
0 votes
Merci pour la référence. C'est une question très vaste, mais on peut trouver une réponse ici.