MyObject& operator=(MyObject&& rhs) {
   logger.WriteMessage(L"move assignment op");
   value = std::move(rhs.value);
 }
 ~MyObject() {
   logger.WriteMessage(L"dstr");
 }
 MyObject& operator=(const MyObject& rhs) {
   logger.WriteMessage(L"assigment op");
   value = rhs.value;
 }
 MyObject(MyObject&& rhs) {
   logger.WriteMessage(L"move cotr");
   value = std::move(rhs.value);
 }
 MyObject(const MyObject& rhs) {
   logger.WriteMessage(L"copy cotr");
   value = rhs.value;
 }
 MyObject(std::wstring value) {
   logger.WriteMessage(L"cotr");    
   this->value = value;
 }
 MyObject() {
   logger.WriteMessage(L"cotr");    
 }