Ich arbeite gerade an einer Klasse mit vielen Templates und in der Lage Tupel von Tupeln zu bauen würde es viel einfacher machen
Aber ich habe diesen einfachen Code in MSVC ++ 2010 versucht:
%Vor%Und ich bekomme einen Kompilierungsfehler. Das gleiche Problem passiert, wenn ich nicht std :: make_tuple, sondern direkt den Konstruktor std :: tuple
verwendeIst es ein Fehler von MSVC oder sind Tupel von Tupeln nicht vom Standard erlaubt?
Danke
Weitere Datenpunkte:
Wenn wir std::tr1::tuple
verwenden und den Typ explizit angeben, anstatt auto
zu verwenden, kompiliert Visual C ++ 2008 den Code ohne Fehler. Der Versuch, denselben Code mit Visual C ++ 2010 zu kompilieren, führt zu dem Fehler, den Sie sehen.
Wenn wir boost::tuple
verwenden und den Typ explizit angeben, statt auto
, dann kompilieren Visual C ++ 2008 und Visual C ++ 2010 beide den Code ohne Fehler.
Es sieht so aus, als wäre es wahrscheinlich ein Implementierungsfehler.
Sie haben ein Tupel mit nur einem Mitglied gemacht - stört das nicht den Zweck von Tupeln? Wie auch immer, ich vermute, das führt zu Mehrdeutigkeiten.
make_tuple
kombiniert Typinferenz mit einem Aufruf des Konstruktors tuple
. Wenn der Konstruktor tuple
mit einem einzelnen Argument aufgerufen wird, das auch ein tuple
ist, ist es möglich, dass ein konvertierender Konstruktor besser passt als ein umgebender Konstruktor. Daher das Problem.
Tupel von Tupeln sind erlaubt. 1-Tupel sind möglicherweise nicht.
Tags und Links c++11 visual-c++ tuples