volatile und const volatile std :: tuple und std :: get

9

Blick auf den C ++ 11-Standard. Ich kann sehen, dass die Spezialisierung von std::tuple_size und std::tuple_element für volatile und const volatile Tupel bereitgestellt wird.

%Vor%

Aber std::get bieten keine Spezialisierung für volatile oder const volatile tuple.

Ich habe den folgenden Code auf GCC.4.8.1 versucht

%Vor%

Ich bekomme den Fehler: no matching function for call to 'get(volatile std::tuple<int, int>&)'

Wenn ich also verstehe, kann ich flüchtige Tupel (const) erzeugen, aber ich kann nicht auf ihre Elemente zugreifen.

Ist das ein erwartetes Verhalten oder ein Versehen?

Vielen Dank.

    
user4237465 10.11.2014, 22:37
quelle

1 Antwort

4

Dies gilt nicht nur für std::get , sondern auch für die relationalen Operatoren oder swap . Warum unterstützt swap nicht flüchtige Tupel? Da kein Konstruktor verschieben von tuple flüchtige Tupel verwendet. Gleiches gilt für den Zuweisungsoperator . Wenn die Standardbibliothek in ihrer Gesamtheit betrachtet wird, stellt fast keine Klasse oder Vorlage tatsächlich Überladungen für flüchtige Objekte bereit 1 . Vielleicht wäre es zu viel Aufwand bei der Standardisierung und Implementierung; Oder vielleicht wurde es als unsinnig angesehen, flüchtige Klassenobjekte zu haben. In beiden Fällen sind flüchtige Tupel derzeit ziemlich unbrauchbar, und das Hinzufügen einer get -Überladung wäre in Bezug auf den aktuellen Zustand der Schnittstelle inkonsistent.

Die Verwendung von volatile tuple als Typ (und kein Objekt) ist per se nicht problematisch und könnte nützlich sein. Das und die Tatsache, dass so ziemlich jedes andere Typmerkmal in der Standardbibliothek auch für alle cv-Qualifier spezialisiert ist, führt dazu, dass tuple_element und tuple_size es unterstützen.

1 Man kann dies leicht überprüfen, indem man in C ++ - Standard ab Klausel 17 nach volatile sucht. Man wird feststellen, dass keine Funktion (Template) außer den für Atomics in Klausel 29 für flüchtige Parameter überladen ist.

    
Columbo 10.11.2014 23:57
quelle

Tags und Links