Como faço loop em pares consecutivos em um contêiner STL usando a sintaxe de loop baseada em intervalo?

Como faço para criar uma classe personalizada para fazer um loop por pares consecutivos de itens em um contêiner STL usando um loop baseado em intervalo?

Esta é a sintaxe e a saída que quero:

std::list<int> number_list;
number_list.push_back(1);
number_list.push_back(2);
number_list.push_back(3);

auto paired_list = Paired(number_list);
for (const auto & pair : paired_list) {
  std::printf("The pair is (%d, %d)\n", *(pair[0]), *(pair[1]));
  // or
  //std::printf("The pair is (%d, %d)\n", *(pair.first), *(pair.second));
}
// output:
// The pair is (1, 2)
// The pair is (2, 3)

Eu sei que estes (e mais) são necessários, mas não consigo descobrir:

template <class T>
class Paired {
  ???
  class iterator {
    ???
  }
  iterator begin() {
    ...
  }
  iterator end() {
    ...
  }
}

Não se preocupeconst modificadores.

Sem impulso.

Não modifique ou copie objetos no contêiner.

questionAnswers(4)

yourAnswerToTheQuestion