9 Jan
2023
9 Jan
'23
10:13 p.m.
On 10/01/2023 07:15, Peter Dimov wrote:
If I understand correctly, the lack of strong guarantee is caused by the by-value constructor moving from the argument even when construction fails? E.g.
Foo foo( true, std::move( my_t ) ); // leaves my_t moved-from on exception
If so, that doesn't seem like an unusual feature -- https://clang.llvm.org/extra/clang-tidy/checks/modernize/pass-by-value.html strongly encourages that constructors accept movable values by value, which will always move-from them even if the constructor later throws. (If the parameter type's move/copy constructor throws then it gets more complicated, though move constructors at least are typically expected to not throw.)