It just occurred to me I noticed that `std::string`'s `substr` operation could be much more efficient for rvalues when it could steal the allocated memory from `*this`. 

The Standard library of N3225 contains the following member function declaration of `std::string`

```
basic_string substr(size_type pos = 0, size_type n = npos) const;

```

Can an implementation that could implement an optimized `substr` for rvalues overload that and provide two versions, one of which could reuse the buffer for rvalue strings?

```
basic_string substr(size_type pos = 0) &&;
basic_string substr(size_type pos, size_type n) const;

```

I imagine the rvalue version could be implemented as follows, reusing the memory of `*this` an setting `*this` to a moved-from state.

```
basic_string substr(size_type pos = 0) && {
  basic_string __r;
  __r.__internal_share_buf(pos, __start + pos, __size - pos);
  __start = 0; // or whatever the 'empty' state is
  return __r;
}

```

Does this work in an efficient fashion on common string implementations or would this take too much housekeeping?