C ++ 0x: Sind Tupel-Tupel erlaubt?

8

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

verwende

Ist es ein Fehler von MSVC oder sind Tupel von Tupeln nicht vom Standard erlaubt?

Danke

    
Tomaka17 15.07.2010, 09:55
quelle

2 Antworten

4

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.

    
James McNellis 15.07.2010, 13:05
quelle
3

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.

    
Ben Voigt 15.07.2010 13:16
quelle

Tags und Links