Während der Umsetzung std::any
C++ 17 ist gemäß der Spezifikation verfügbar in this Wiki ich über etwas gestolpert, das mir unsinnig schien:Warum erlaubt C++ 17's std :: any keinen Rückgabewert von any_cast?
In the definition der freien Funktion std::any_cast
, die Werte aus einer std::any
Instanz abzurufen verwendet wird, eine Überlastung für r-Wert Referenzen geliefert wird (es ist die dritte):
template< class ValueType >
ValueType any_cast(any&& operand); // (3)
Jetzt gibt es eine Anforderung unterhalb der Synopse aufgelistet, die 2 und 3 zu Überlastungen gilt (dh einschließlich auch der r-Wert Überlast) :
2-3)
Returns*any_cast<std::remove_reference_t<ValueType>>(&operand)
Die Definition scheint nicht wirklich zu erlauben, die Daten zu bewegen!
Der Funktionsaufruf wird nur auf die zeigerbasierte Überladung umgeleitet; die Information über die temporäre Natur von operand
ist verloren!
Ist es beabsichtigt, dass ich aus einer beliebigen Instanz nicht bewegen kann? Ist es nur ein Fehler im Wiki? Liege ich hier falsch?
Verbunden: http://wg21.cmeerw.net/lwg/issue2509 –
"Bereit - Die LWG hat Konsens erreicht, dass das Problem ein Fehler in der Norm ist, die vorgeschlagene Lösung korrekt ist und das Problem bereit ist Weiterleiten an den Gesamtausschuss für weitere Maßnahmen als Defect Report (DR). Normalerweise muss ein Problem eine vorgeschlagene Lösung in der Liste der derzeit veröffentlichten Probleme haben, deren Wortlaut sich während der LWG-Überprüfung nicht ändert, um in den Bereit-Status zu wechseln. " – Yakk
SO scheint die' C++ 17' nicht zu akzeptieren Stichwort auf diesem, so zögern Sie nicht, meinen zweiten Versuch abzulehnen, sie zu addieren.Sie sind Synonyme, und "C++ 1z" ist als Master eingestellt. Das scheint falsch ... aber ich akzeptiere widerwillig @ Yakk Vorbehalt, Vergangenheit gegeben Beweise ;-) –