Der folgende Code wird auf VS2005 und gcc-4.3.4 kompiliert.
%Vor%Aber es kann nicht auf VS2010 mit der Fehlermeldung kompiliert werden:
%Vor% Ich verstehe, dass in Microsoft-Implementierung von VS2010 Pr::first
tatsächlich ein Mitglied von _Pair_base
ist. AFAIK spielt jedoch keine Rolle. &Pr::first
muss weiterhin vom Typ int Pr::*
sein. Beachten Sie, dass der folgende Code gut kompiliert:
Also, ist es eine nicht standardmäßige std :: pair-Implementierung, ein Compiler-Bug oder ein nicht standardmäßiger Code?
Der Standard bietet eine klare Definition dessen, was ein Paar ist, sowohl in C ++ 03 als auch in C ++ 11, wobei das Paar zwei Mitgliedsattribute enthält, und liefert genauen Code, wie ein Paar aussieht. Ich würde dieses Verhalten (das Verschieben der Mitglieder in eine Basisklasse) als Vertragsbruch betrachten, da Ihr Code gemäß dem Standard gültig ist und von der Implementierung abgelehnt wird.
Daher ist die Implementierung von VC2010 nicht standardkonform in diesem speziellen Fall.
Der Standard lässt keine Konvertierung zu, wenn die Template-Parameter übereinstimmen (die Suche nach dem Standard-Absatz wird bearbeitet).
%Vor% Dies setzt X
als ( std::
wird der Kürze wegen weggelassen)
Aber der statische Typ von &Pr::first
ist
Der Compiler müsste also eine Konvertierung durchführen, wie sie im Fehler angezeigt wird. Ich weiß nicht genau, wie gcc std::pair
implementiert, aber es scheint so ohne Vererbung zu sein. Ich werde es nachschlagen und erneut bearbeiten.
Tags und Links c++ visual-studio-2010