Concept Subspace :: sus :: iter :: Product

template <class T, class Item = T>
concept Product
requires
requires(__private::IteratorArchetype<Item>&& iter) {
  // Use cloned() or copied() to convert an Iterator of references to values.
  requires(!std::is_reference_v<T>);
  { T::from_product(::sus::move(iter)) } -> std::same_as<T>;
}

Trait to represent types that can be created by multiplying elements of an iterator.

Types which implement this trait can be generated by using the product() method on an iterator. Like with FromIterator, the from_product() method should rarely be called directly.

When given an empty iterator, the result of from_product() should be the "one" value of the type.