Implement specialized swap() for expected<T, E> am: f927d5ca7e am: 2e426925ff am: 2081a0d6e3 am: 31ed57c908

Original change: https://android-review.googlesource.com/c/platform/system/libbase/+/1446815

Change-Id: Icf4721e918bd10acb97018c16eb8b4ad9c55ba1d
diff --git a/include/android-base/expected.h b/include/android-base/expected.h
index 9470344..9668612 100644
--- a/include/android-base/expected.h
+++ b/include/android-base/expected.h
@@ -380,7 +380,7 @@
 
   // Specialized algorithms
   template<class T1, class E1>
-  friend void swap(expected<T1, E1>&, expected<T1, E1>&) noexcept;
+  friend void swap(expected<T1, E1>& x, expected<T1, E1>& y) noexcept(noexcept(x.swap(y)));
 
  private:
   std::variant<value_type, unexpected_type> var_;
@@ -416,6 +416,11 @@
   return y.has_value() || (x.value() != y.error());
 }
 
+template<class T1, class E1>
+void swap(expected<T1, E1>& x, expected<T1, E1>& y) noexcept(noexcept(x.swap(y))) {
+  x.swap(y);
+}
+
 template<class E>
 class _NODISCARD_ expected<void, E> {
  public:
@@ -570,7 +575,7 @@
 
   // Specialized algorithms
   template<class T1, class E1>
-  friend void swap(expected<T1, E1>&, expected<T1, E1>&) noexcept;
+  friend void swap(expected<T1, E1>& x, expected<T1, E1>& y) noexcept(noexcept(x.swap(y)));
 
  private:
   std::variant<std::monostate, unexpected_type> var_;