Now define subclass RString that adds an in-place reverse method to String . There are workarounds to this, but none of them are very satisfying or general.
Similar snags result from other strategies.
The base classes provide functionality that, although rarely needed, is otherwise difficult to support without subclassing. No operations are virtual, and many are inlinable. These consequences are not all bad. If I were redesigning them today, I would surely take the first option, and not provide an extensive value-based support interface. However, it is also very likely that users would complain about inconveniences stemming from the lack of simple value-based operations such as constructive string concatenation.