};
template <class T>
-Future<T>::Future(Future<T>&& other) noexcept : state_(other.state_) {
- other.state_ = nullptr;
+Future<T>::Future(Future<T>&& other) noexcept : state_(nullptr) {
+ *this = std::move(other);
}
template <class T>
template <class T>
Future<T>::~Future() {
+ detach();
+}
+
+template <class T>
+void Future<T>::detach() {
if (state_) {
- setCallback_([](Try<T>&&) {}); // detach
+ state_->detachFuture();
+ state_ = nullptr;
}
}
void Future<T>::setCallback_(F&& func) {
throwIfInvalid();
state_->setCallback(std::move(func));
- state_ = nullptr;
}
template <class T>