Here's an example where the standard library gets this wrong. I do not yet understand why this works, but I've found I can make things work in similar situations by putting implementations of index(_:offsetBy:), index(_:offsetBy:limitedBy:), and distance(from:to:) in both my Collection and my conditional BidirectionalCollection conformances.