#pragma once #include "String.h" class String; class StringValue; // TODO: think about making ctors explict /* This class provides a simple wrapper for a char primitive, and implements * copy-on-write semantics for the non-const String::operator[] via some magic */ class Char { private: size_t _index; String& _string; public: Char(size_t index, String& string) :_index(index), _string(string) {} operator char() const; Char& operator=(char other); };