#include <iostream>

class String
 {
     char*   data;
     int     len;
     public:
         // Normal rule of three applied up here.
         void swap(String& rhs) throw()
         {
            std::swap(data, rhs.data);
            std::swap(len,  rhs.len);
         }
         String& operator=(const String& rhs) // Standard Copy and swap. 
         {
            //rhs.swap(*this);
            return *this;
         }

         // New Stuff here.
         // Move constructor
         String(String&& cpy) throw()    // ignore old throw construct for now.  
            : data(NULL)
            , len(0)
         {
            *this = std::forward<String>(cpy);
         }
         String& operator=(String&& rhs) noexcept 
         {
            rhs.swap(*this);
            return *this;
         }
};

int main() 
{
	return 0;
}