Betrachten Sie das folgende minimale Beispiel:
%Vor% Nach dem C ++ - Standard sollte dies nicht kompiliert werden, da std::seed_seq
weder kopiert wird konstruierbar und nicht zuweisbar kopieren .
Dies kompiliert jedoch sowohl mit g++ 4.9
als auch mit clang 3.4
Die android ndk llvm-libc++
Implementierung scheint der "nicht kopierbar" Eigenschaft von seed_seq
zu folgen. Was in der Quelle unter
Oder indem Sie das minimale Beispiel mit
kompilieren %Vor%Ich habe dies bereits verwendet (ohne meinen nicht konformen Code zu kennen), um eine Kopie des Seeds für Protokollierungszwecke zu speichern. *
Ich frage mich:
Warum ist seed_seq
nicht kopierbar?
Dies ist das erste Mal, dass g++
und clang
nicht dem Standard entsprechen. Ist es eine bewusste Entscheidung, vom Standard abzuweichen, oder handelt es sich um einen Implementierungsfehler? Wie weit verbreitet ist das? Ich würde gerne mehr erfahren.
* Ich habe festgestellt, dass ich an seed_seq
falsch gedacht habe, und dass, wenn ich nur an den seed_seq::param
Werten interessiert bin (die seed_seeq
's anfänglichen Startwerte), dass ich stattdessen meine Kopie behalten soll a vector<T>
, anstelle eines Typs, der ganze Zahlen erzeugen soll.
Für diejenigen, die dies in der Zukunft sehen, laut T.C. und ecatmur, das ist libstdc ++ Fehler 65631 . Es gibt jedoch keine ETA, die repariert werden kann. das Verhalten stimmte mit dem ursprünglichen Vorschlag überein, aber dies wurde geändert, um die Kopierbarkeit aus dem Konzept zu entfernen, um LWG-Problem 1069 zu adressieren, gemäß der N3037-Papier .