8
votes

Est-ce une implémentation non standard STD :: paire de paires, un bug de compilateur ou un code non standard?

Le code suivant compile sur vs2005 et GCC-4.3.4 .

int Pr::* x = &Pr::first;


0 commentaires

3 Réponses :


4
votes

La norme ne permet aucune conversion tout en faisant correspondre les paramètres de modèle (à la recherche du paragraphe standard, modifiera).

int _Pair_base<int,int>::*


8 commentaires

Pourquoi le type de & pr :: premier est int _pair_base :: * et non int paire :: * << / code>? Je pensais que le type dépend de la façon dont vous accédez au membre est le premier endroit.


Si c'était int _pair_base :: * puis int PR :: * x = & pr :: premier; échouerait aussi, car vous ne pouvez pas implicitement moulage membre de base à dérivé.


@ybungalobillille §4.11: "Un pointeur de type" de type "à un membre de B de type CV T," où B est un type de classe, peut être converti en une rvalue de type "pointeur à un membre de D de type CV T," où D est une classe dérivée (clause 10) de B "


@James: merci, cherchait ça!


@ybungalobill: En outre, essayez int PR :: * x = & _pair_base :: premier :)


Ok, on dirait que tu as raison de la conversion. Mais vous ne répondez toujours pas à la conformité standard de la mise en œuvre STD :: paire et de mon code.


@ybung: Eh bien, @David fait, et je ne veux pas voler sa réponse. :)


@Xeo: My La réponse n'est pas à moi, c'est juste un peu de connaissances partagées par beaucoup. J'ai effectivement voté votre question, car je pense qu'il fournit des informations précieuses (même si elle ne répond pas à la question exacte de la conformité).



8
votes

La norme fournit une définition claire de la paire, à la fois en C ++ 03 et C ++ 11, la paire contient deux attributs de membre et fournit un code exact de quelle paire ressemble. Je considérerais ce comportement (déplacer les membres à une classe de base) comme une violation du contrat car votre code est valide en fonction de la norme et qu'il est rejeté par la mise en œuvre.

La mise en œuvre de VC2010 n'est donc pas standard conformément à ce cas particulier.


2 commentaires

"La mise en œuvre de VC2010 n'est donc pas une standard conforme." - Nouvelles où? ;)


@Xeo: NOUVELLES NOWHHERE AVEC CETTE PENSION ... J'ai spécifié un peu plus, afin que cela puisse être une nouvelle à quelqu'un :)