32 votes

Il semble y avoir une contradiction au §12.3.2 / 1 dans la norme C ++11

C++11 §12.3.2/1 (l'emphase est mienne):

Une fonction membre d'une classe X ayant pas de paramètres avec un nom de la forme

de conversion-fonction-id:

l'opérateur de conversion de type-id

la conversion de type-id:

type spécificateur-seq de conversion-déclaration de

la conversion de demande de déclaration:

ptr-opérateur de conversion-déclaration de

spécifie une conversion de X pour le type spécifié par la conversion de type id. De telles fonctions sont appelées les fonctions de conversion. Pas de type de retour peut être spécifié. Si une fonction de conversion est une fonction membre, le le type de la fonction de conversion (8.3.5) est "fonction ne prenant aucun paramètre de retour de conversion de type-id".

Est une fonction de conversion toujours une fonction membre, ou il y a des cas où ce n'est pas vrai?

47voto

Casey Points 18217

La clause "Si une fonction de conversion est une fonction membre," a été ajouté au projet de travail dans N2798 dans le cadre des Concepts de formulation par N2773 Libellé Proposé pour les Concepts. N2798 12.3.2/1 lit (je vais utiliser le gras pour montrer les ajouts, et barré pour montrer les absorptions):

1 une fonction membre d'Une classe X ayant pas de paramètres, ou une fonction associée à un concept dont le seul paramètre est de type X, avec un nom de la forme

de conversion-fonction-id:

operator de conversion de type-id

la conversion de type-id:

type spécificateur-seq attribut spécificateur del'opt de conversion-déclaration del'opt

la conversion de demande de déclaration:

ptr-opérateur de conversion-déclaration del'opt

spécifie une conversion de l' X pour le type spécifié par la conversion de type id. Ces états fonctions sont appelées fonctions de conversion. Les Classes, les énumérations, et typedef-les noms ne doivent pas être déclarés dans le type spécificateur-seq. Ni les types de paramètre, ni Aucun type de retour peut être spécifié. Si une fonction de conversion est une fonction membre, tTil type de a la fonction de conversion (8.3.5) est "fonction ne prenant aucun paramètre de retour de conversion de type-id"; si une fonction de conversion est associé à une fonction, le type de la fonction de conversion est "fonction prenant un paramètre de type X le retour de conversion de type-id". Une fonction de conversion n'est jamais utilisé pour convertir ...

Les Concepts de formulation a été supprimé dans le projet de N2960. Le "Si une fonction de conversion est une fonction membre," ont également été retiré puisqu'il est désormais vestigal. Pertinentes partie de N2960 §12.3.2/1:

1 une fonction membre d'Une classe X ayant pas de paramètres, ou une fonction associée à un concept dont le seul paramètre est de type X, avec un nom de la forme

de conversion-fonction-id:

operator de conversion de type-id

la conversion de type-id:

type spécificateur-seq attribut spécificateur del'opt de conversion-déclaration del'opt

la conversion de demande de déclaration:

ptr-opérateur de conversion-déclaration del'opt

spécifie une conversion de l' X pour le type spécifié par la conversion de type id. De telles fonctions sont appelées fonctions de conversion. Pas de type de retour peut être spécifié. Si une fonction de conversion est un membre de la fonction, le type de la fonction de conversion (8.3.5) est "fonction ne prenant aucun paramètre de retour de conversion de type-id"; si une fonction de conversion est associé à une fonction, le type de la fonction de conversion est "fonction prenant un paramètre de type X le retour de conversion de type-id". ...

6voto

Une fonction de conversion est toujours une fonction membre (non static ).

Le libellé "si" n'était pas présent dans C ++ 98 ou C ++ 03. Je ne peux pas non plus y faire référence dans la liste des rapports de défauts. C'est étrange.


Comme l'a commenté R. Martinho Fernandes, le libellé est étrange, mais pas contradictoire.

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