void apply(Source&& src, Destination& dest, boost::mpl::false_) const
 {
     try {
         dest.set_result(src.get());
     }
     catch (...) {
         dest.set_exception(boost::current_exception());
     }
 }
 void apply(Source&& src, Destination& dest, boost::mpl::true_) const
 {
     try {
         src.get();
         dest.set_result(util::unused);
     }
     catch (...) {
         dest.set_exception(boost::current_exception());
     }
 }