The backward range can have an input range interface, like retro:
void is_word_boundary(Bidi r)
{
bool is_word_prev = r.prev.empty ? false :
isword(r.prev.front);
bool is_word_this = r.empty ? false : isword(r.front);
return is_word_prev != is_word_this;
}