Example #1
0
 void swap(Expected& rhs) {
   if (gotHam) {
     if (!rhs.gotHam) {
       auto t = std::move(rhs.spam);
       new(&spam) std::exception_ptr(t);
       std::swap(gotHam, rhs.gotHam);
     }
   } else {
     if (rhs.gotHam) {
       rhs.swap(*this);
     } else {
       spam.swap(rhs.spam);
       std::swap(gotHam, rhs.gotHam);
     }
   }
 }