Le code suivant compile sur vs2005 et GCC-4.3.4 .
int Pr::* x = &Pr::first;
3 Réponses :
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>::*
Pourquoi le type de & pr :: premier code> est
int _pair_base
int paire
Si c'était int _pair_base
int PR :: * x = & pr :: premier; code> é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
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 i> 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é).
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. P>
La mise en œuvre de VC2010 n'est donc pas standard conformément à ce cas particulier. P>
"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 :)
Oui, c'est un bug. Trouvé le rapport de bogue ici: p>