Как проверить, что переданный Итератор является итератором с произвольным доступом?

У меня есть следующий код, который выполняет некоторые арифметические операции с итератором:

template<class Iterator>
void Foo(Iterator first, Iterator last) {
  typedef typename Iterator::value_type Value;
  std::vector<Value> vec;
  vec.resize(last - first);
  // ...
}

Выражение (последний - первый) работает (AFAIK) только для итераторов с произвольным доступом (например, из вектора и deque ). Как я могу проверить в коде, что переданный итератор соответствует этому требованию?

30
задан Frank 29 November 2010 в 19:28
поделиться