If a client class attempts to swap two Wholes the default std::swap() implementation provided by <algorithm> could throw - we need to provide a safe overloading of std::swap().
(The namespace ::example5 is where the last example fragments happened to reside.)
[Generally speaking it is a bad idea to introduce things into the standard namespace - it leads to undefined behaviour - but since we don’t introduce a new name into std this is allowed.]