Das folgende Programm kompiliert nur, wenn ich das -DA=1
-Flag an den Compiler übergebe:
Wenn -DA=0
übergeben wird, schlägt die Kompilierung mit folgendem Fehler fehl:
Es scheitert bei der Verwendung von GCC 4.9 oder Clang 3.4.
Beeinflusst das Vorhandensein einer Elementvariablen das Verhalten explizit vordefinierter Konstruktoren?
Ich habe stdlibc ++ sowohl für GCC als auch für Clang verwendet. Der Code kompiliert bei Verwendung von Clang 3.4 und libc ++.
Diese Version von std::move
ist:
OutputIterator
Eigenschaften sind definiert durch [output.iterators], insbesondere muss der folgende Ausdruck gültig sein:
wobei r
der Ausgabe-Iterator ist.
Aufgrund der von Coliru angezeigten Fehlermeldungen sieht es so aus, als ob die Bibliothek std::is_copy_assignable<element>
überprüft, was natürlich falsch ist.
Dies scheint ein Fehler zu sein; Die Verschiebung sollte mit dem move-assignment-Operator funktionieren.
Vergleichen Sie Folgendes in demselben Coliru:
%Vor% Die Definition von std::move
(3 Argumente) schließt ein, dass für jeden Index *(result + n) = std::move( *(first + n) );
ausgeführt wird. Wenn also meine erste Zeile gültig ist, sollte auch meine zweite Zeile gültig sein.
Tags und Links c++