Einheitliche Initialisierung einer atomaren Struktur?

8
%Vor%

Bearbeiten: Sowohl {{1, 2}} als auch ({1, 2}) arbeiten in g ++, beide funktionieren nicht beim Klonen. Gibt es einen Workaround für den Clang?

    
David 22.07.2014, 15:11
quelle

2 Antworten

5

Dies ist Clang Bug 18097 . Hier ist ein langer Thread, der das Problem diskutiert, der zu sein scheint, dass Clam nur skalare Typen unterstützt für T in atomic<T> . Der C ++ 11-Standard besagt eindeutig (§29.5 / 1), dass T ein beliebig kopierbarer Typ sein kann.

Beide in der Frage gezeigten Verwendungen sollten mit diesem Konstruktor übereinstimmen

%Vor%

Die einzige Möglichkeit, die ich mir vorstellen kann, ist das Erstellen von atomic<S> und das anschließende Initialisieren des Objekts mit atomic::store .

%Vor%     
Praetorian 22.07.2014, 17:13
quelle
0

std::atomic<S> asd({1, 2});

std::atomic<S> hat einen Konstruktor, der einen Wert vom Typ S annimmt. Die Initialisiererliste {1, 2} wird aufgrund dieses Konstruktors implizit in ein temporäres S umgewandelt.

    
axnsan 22.07.2014 15:25
quelle