| > Thusly, what happens in code that accesses the string after the move is UB. No, it is implementation-defined behaviour. > In the implementation of C++ the article uses the string was just empty. But for all we know it may still contain a 1:1 copy of the original or 20 copies or a gobbledygook of bytes. Yes, and if you want to make sure that the string is empty before you do something else with it, you just use a clear() (which will be optimised away by the compiler anyway). Or, if you prefer, you can assign another string to it, or anything else really. > Any code that relies on the string being something (even empty) may behave different if it isn't. That's the very definition of UB. No it is not. > "A typical implementation strategy" is meaningless for someone writing code against a language specification. Then don't rely on that specific implementation detail and make sure that the string is in the state you want or, even better, don't touch the moved-from string ever again. |