Именованные требования в C ++ 17 - это, прежде всего, нотация. Они соотносятся с обнаруживаемыми вещами в языке, только если они предъявляют требования, которые можно обнаружить. И ContiguousIterator не предъявляет обнаружимых требований к типам, которые их реализуют.
Таким образом, наиболее практичная вещь, которую позволяет вам ContiguousIterator, - это написать «Вы должны передать ContiguousIterator» в своей документации, понимая, что читатель отследит конкретные детали этого термина. Но нет, ContiguousIterator, как определено в C ++ 17, не позволяет вам писать что-либо, что могло бы статически определять разницу между ContiguousIterators и RandomAccessIterator, которые не являются смежными.