void swap( promise< R > & l, promise< R > & r) noexcept { l.swap( r); }
void swap(promise<T>& lhs, promise<T>& rhs) { lhs.swap(rhs); }