Make base::is_instantiation a type constraint.

Putting the type to test first allows it to be used in requires
expressions as a type constraint, e.g.

requires requires (T t) {
  { t.GetVector() } -> base::is_instantiation<std::vector>;
}

Change-Id: I5c0b941990a5b4e529dd088ccae95afdd2e7cf16
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6640763
Commit-Queue: Daniel Cheng <dcheng@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
Owners-Override: Lei Zhang <thestig@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1473345}
NOKEYCHECK=True
GitOrigin-RevId: fb999fd3267ace0f7ad7330db09fc188634cb213
diff --git a/public/cpp/bindings/array_data_view.h b/public/cpp/bindings/array_data_view.h
index 5b022afd..718259e 100644
--- a/public/cpp/bindings/array_data_view.h
+++ b/public/cpp/bindings/array_data_view.h
@@ -70,7 +70,7 @@
 };
 
 template <typename T>
-  requires(!base::is_instantiation<std::optional, T>)
+  requires(!base::is_instantiation<T, std::optional>)
 class ArrayDataViewImpl<
     T,
     typename std::enable_if<
@@ -103,7 +103,7 @@
 };
 
 template <typename T>
-  requires(base::is_instantiation<std::optional, T>)
+  requires(base::is_instantiation<T, std::optional>)
 class ArrayDataViewImpl<
     T,
     typename std::enable_if<
diff --git a/public/cpp/bindings/lib/array_internal.h b/public/cpp/bindings/lib/array_internal.h
index f5f804b..9c73510 100644
--- a/public/cpp/bindings/lib/array_internal.h
+++ b/public/cpp/bindings/lib/array_internal.h
@@ -194,7 +194,7 @@
 // TODO(ffred): consider merging with the optional<bool> specialization using
 // if constexpr.
 template <typename T>
-  requires(base::is_instantiation<std::optional, T>)
+  requires(base::is_instantiation<T, std::optional>)
 struct ArrayDataTraits<T> {
   using StorageType = typename T::value_type;
 
diff --git a/public/cpp/bindings/lib/array_serialization.h b/public/cpp/bindings/lib/array_serialization.h
index fd26ce9..0f0be5d 100644
--- a/public/cpp/bindings/lib/array_serialization.h
+++ b/public/cpp/bindings/lib/array_serialization.h
@@ -163,7 +163,7 @@
 template <typename MojomType,
           typename MaybeConstUserType,
           typename UserTypeIterator>
-  requires(!base::is_instantiation<std::optional, typename MojomType::Element>)
+  requires(!base::is_instantiation<typename MojomType::Element, std::optional>)
 struct ArraySerializer<
     MojomType,
     MaybeConstUserType,
@@ -212,7 +212,7 @@
 template <typename MojomType,
           typename MaybeConstUserType,
           typename UserTypeIterator>
-  requires(base::is_instantiation<std::optional, typename MojomType::Element>)
+  requires(base::is_instantiation<typename MojomType::Element, std::optional>)
 struct ArraySerializer<
     MojomType,
     MaybeConstUserType,
diff --git a/public/cpp/bindings/lib/array_serialization_send_validation.h b/public/cpp/bindings/lib/array_serialization_send_validation.h
index dbe9943..17b23c5 100644
--- a/public/cpp/bindings/lib/array_serialization_send_validation.h
+++ b/public/cpp/bindings/lib/array_serialization_send_validation.h
@@ -74,7 +74,7 @@
           typename MaybeConstUserType,
           SendValidation send_validation,
           typename UserTypeIterator>
-  requires(!base::is_instantiation<std::optional, typename MojomType::Element>)
+  requires(!base::is_instantiation<typename MojomType::Element, std::optional>)
 struct SendValidationArraySerializer<
     MojomType,
     MaybeConstUserType,
@@ -121,7 +121,7 @@
           typename MaybeConstUserType,
           SendValidation send_validation,
           typename UserTypeIterator>
-  requires(base::is_instantiation<std::optional, typename MojomType::Element>)
+  requires(base::is_instantiation<typename MojomType::Element, std::optional>)
 struct SendValidationArraySerializer<
     MojomType,
     MaybeConstUserType,