On Sat, 27 Oct 2018 at 01:27, Joe Buck <joe.buck@synopsys.com> wrote:
The reason move constructors were introduced was to speed up code in cases where an object
Is copied and the copy is no longer needed. It is unfortunate that there may now be code out
there that relies on accidental properties of library implementations. It would be best if the
Implementation is not constrained. Unless the standard mandates that, after a string is moved,
the string is empty, the user should only be able to assume that it is in some consistent but
unspecified state. Otherwise we pay a performance penalty forever.
If the standard explicitly states that the argument to the move constructor is defined to be
empty after the call, we're stuck.
It certainly doesn't specify so for an SSO string, so we're not stuck.
On the other hand, we already get
a speed-up, it's just not as much of a speed-up as it can be. What I
really loathe is the potential implementation
divergence; it's all good for the priesthood to refer to the standard
and say "you shouldn't have done that", but
that's, as a good friend of mine provided as a phrasing on a different
manner, spectacularly unhelpful.