K
muvvel schrieb:
da musst du nicht ein exotisches Beispiel bringen).
Dass das "exotisches" sei, würde ich nicht behaupten. Es ist ein Beispiel aus den Veröffentlichungen des Komitees, Veröffentlichungen, die zur Einführung von noexcept und dazu geführt haben, ausnahmewerfende Move-Konstruktoren zu tolerieren. Wenn du eine Klasse aus teils move-optimierten Typen und teils "Legacy-Typen" baust, die keinen move-ctor haben abar dafür einen ausnahmewerfenden Konstruktor, dann ist ein ausnahmefreies Moven eben nicht möglich, es sei denn, du bringst die Legacy-Typen (die z.B. aus einer ganz anderen Bibliothek kommen) selbst auf den neusten Stand. Würde man throwing Move-Ctors einfach verbieten, dann würde man in einigen Fällen, nämlich in denen, wo man die starke Garantie nicht benötigt, Performance verschenken, da
alle "Elemente" kopiert werden müssten, obwohl einige davon vielleicht move-bar sind. So, wie es jetzt ist, ist es doch am besten. Kein nothrow-move-Zwang, aber dafür kann man den nothrow-Status per type_traits abfragen und ggf auf Kopieren zurückfallen, wenn man die strong guarantee braucht.
muvvel schrieb:
Ist es das wert?
Das kannst nur Du bewerten, solange du nicht konkreter wirst.