Hi again,
It is funny that with fully dynamic strings, the copy constructor is
"better" than the move constructor: faster, doesn't throw, etc. I
think we should remove the move constructor in that case, or at least
make it act the same as the copy constructor. I didn't mark the copy
constructor as noexcept, but without checking the code it seems
likely we could.
We could, but in my opinion fiddling with those isn't worth the
trouble, because the whole "fully dynamic string" thing is just a
workaround for issues of the current reference counted implementation
vs the statically allocated empty string on some targets.
Well, I have a second (practical) thought about this part. If you are
willing to spend a little more time on this, and can confirm your
preliminary analysis about copy-constructor vs move-constructor, first
blush it definitely makes sense to me, I'm certainly not against your
proposal of having the move-constructor identical to the
copy-constructor in that case. In 4.9.x some targets, not Linux, would
benefit from it.
Thanks,
Paolo.