Detección contigua de iterador

C ++ 17 introdujo el concepto de ContiguousIteratorhttp://en.cppreference.com/w/cpp/iterator. Sin embargo, no parece que haya planes para tener uncontiguous_iterator_tag (de la misma manera que ahora tenemosrandom_access_iterator_tag) reportado porstd::iterator_traits<It>::iterator_category.

Por que escontiguous_iterator_tag ¿desaparecido?

¿Existe un protocolo convencional para determinar si un iterador es contiguo? ¿O una prueba de tiempo de compilación?

En el pasado mencioné quepara contenedores si hay un.data() miembro que se convierte en un puntero a::value escriba y hay.size() miembro convertible a diferencias de puntero, entonces uno debería asumir que el contenedor es contiguo, pero no puedo obtener una característica análoga de iteradores.

Una solución podría ser tener también undata función para iteradores contiguos.

Por supuesto, el concepto contiguo funciona si&(it[n]) == (&(*it)) + n, para todosn, pero esto no se puede verificar en tiempo de compilación.

EDITAR: Encontré este video que pone esto en el contexto más amplio de los conceptos de C ++.CppCon 2016: "Creación y ampliación de la jerarquía de iteradores en un mundo moderno y multinúcleo" por Patrick Niedzielski. La solución usa conceptos (Lite) pero al final la idea es que los iteradores contiguos deben implementar unpointer_from función (igual que midata(...) función).

La conclusión es que los conceptos ayudarán a formalizar la teoría, pero no son mágicos, en el sentido de que alguien, en algún lugar, definirá nuevas funciones especialmente nombradas sobre iteradores que son contiguos. La charla se generaliza a iteradores segmentados (con funciones correspondientessegment ylocal), desafortunadamente no dice nada sobre los punteros zancudos.

Respuestas a la pregunta(1)

Su respuesta a la pregunta