Exemplo n.º 1
0
 void swap(value& rhs) {
     if (this->__hasData) {
         if (!rhs.__hasData) {
             auto t = std::move(rhs.__excpt);
             new(std::addressof(this->__excpt)) std::exception_ptr(t);
             std::swap(this->__hasData, rhs.__hasData);
         }
     } else {
         if (rhs.__hasData) {
             rhs.swap(*this);
         } else {
             std::swap(this->__excpt, rhs.__excpt); // inline function in <exception>
             std::swap(this->__hasData, rhs.__hasData);
         }
     }
 }
Exemplo n.º 2
0
 void swap(value& rhs) {
     if (this->__hasData) {
         if (rhs.__hasData) {
             using std::swap;
             swap(__data, rhs.__data); // may call swap again
         } else {
             auto t = std::move(rhs.__excpt);
             new(std::addressof(rhs.__data)) T(std::move(__data));
             new(std::addressof(this->__excpt)) std::exception_ptr(t);
             std::swap(this->__hasData, rhs.__hasData);
         }
     } else {
         if (rhs.__hasData) {
             rhs.swap(*this);
         } else {
             std::swap(this->__excpt, rhs.__excpt); // inline function in <exception>
             //spam.swap(rhs.spam);
             std::swap(this->__hasData, rhs.__hasData);
         }
     }
 }