Entrambe irange
e counting_range
modellano un intervallo di accesso casuale per i tipi interi. Come sottolinea counting_range
s documentazione, la categoria iteratore viene determinata secondo il seguente algoritmo:
if (CategoryOrTraversal is not use_default)
return CategoryOrTraversal
else if (numeric_limits<Incrementable>::is_specialized)
return iterator-category(random_access_traversal_tag, Incrementable, const Incrementable&)
else
return iterator-category(iterator_traversal<Incrementable>::type, Incrementable, const Incrementable&)
Pertanto, per semplici intervalli come boost::irange(0, 10)
e boost::counting_range(0, 10)
v'è effettivamente alcuna differenza (a parte i tipi di ogni intervallo, di corso!).
Tuttavia, irange
supporta anche iterazione con un passo diverso, ad esempio, boost::irange(0, 10, 2)
e counting_range
supporta anche tipi che sono incrementabile solo e non modellano completamente un numero intero.
Questo è stato un esempio incredibilmente scarisabile di come la disinformazione possa essere presentata come fatto autorevole e sottoposto a peer review, su SO. –