Make advance use two template arguments, like std::advance