Совершенно случайно наткнулся, в стд появилась мега фича ssize()! После долгий метаний относительно signed/unsigned геморроя, сегодня решил - ну буду к каждому проекту присобачивать костылики - sigsize() и idx(), оказалось, что один костыль не нужен. Ещё бы такую перегрузку для контейнеров воткнуть:
operator[]( ptrdiff_t pos );
Жаль проблемы с неоднозначностью будут. Ладно, может чего придумают на этот счёт, ну а пока такое:
template <typename T>
auto &idx(T &container, std::ptrdiff_t i) {
return container[static_cast<std::size_t>(i)];
}
Короче - наверняка есть много людей с тонной static_cast’ов в коде - берите ssize() на вооружение.
PS: да, конечно же знаю про *(ctr.begin() + i).