@Override
  protected boolean matchesSafely(Iterable<? extends T> items, Description mismatchDescription) {
    Matching<T> matching = new Matching<T>(matchers, mismatchDescription);
    for (T item : items) {
      if (!matching.matches(item)) {
        return false;
      }
    }

    return matching.isFinished(items);
  }