#include "Char.h" Char::operator char() const { return _string._str->operator[](_index); } // copy-on-write magic happens here // provides strong exception guarantee Char& Char::operator=(char other) { auto data = new char[_string.size() + 1]; // space for old string & null-terminator std::strcpy(data, _string.c_str()); data[_index] = other; // set the desired char _string._str->operator--(); // release old StringValue _string._str = new StringValue(data); // make a new one return *this; } Char& Char::operator=(const Char& other) { return (*this).operator=(static_cast(other)); }