iterator範囲がソート済みかどうかを調べる

あるiterator範囲がソート済みかどうかを調べる,という要求に対して,私は以前からstd::adjacent_findを使うのが癖になっていて「読みにくいコード書いてしまっているのかな?」と思っていたんですが,これってidiomとして一定の認知度を得ているみたいですね.
http://www.talkaboutprogramming.com/group/comp.lang.c++.moderated/messages/162344.html
以下,adjacent_findを使ってソート済みかどうかを確認するコードの例示.

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

template
inline
bool is_sorted(ForwardIterator first, ForwardIterator last, Predicator pred)
{
  return std::adjacent_find(first, last, std::not2(pred)) == last;
}

template
inline
bool is_sorted(ForwardIterator first, ForwardIterator last)
{
  typedef typename std::iterator_traits::value_type value_type;
  return is_sorted(first, last, std::less());
}

int main(int argc, char *argv[])
{
  using namespace std;
  using namespace boost;

  mt19937 gen(static_cast(time(0)));
  uniform_int<> 
    dist(numeric_limits::min(), numeric_limits::max());
  variate_generator > mt_rand(gen, dist);

  vector v;
  generate_n(back_inserter(v), 10, mt_rand); // vを乱数で詰める

  sort(v.begin(), v.end()); // vをソート

  assert( is_sorted(v.begin(), v.end()) ); // ソート済みだぞ,(゜Д゜)ゴルァ!!

  copy(v.begin(), v.end(), ostream_iterator(cout, "\n")); // 表示

  return 0;
}