for_each_with_indexを調べてみた

std::for_each に ループカウンターを付ける方法を調べて
何種類の実装方法があったが、自分にとって難しかったので、
自分なりにやってみました

#include <iostream>
#include <string>
#include <vector>

// ループカウンター付きfor_each
template<class InputIterator, class Function>
Function for_each_with_index(InputIterator first,InputIterator last,Function fn)
{
  int index=0;
  while (first != last) {
    fn(*first, index);
    ++index;
    ++first;
 }
 return std::move(fn);    //    C++11前、return fn;
}

int main(void)
{
  std::vector<std::string> foo;
  foo.push_back("東京");
  foo.push_back("大阪");
  foo.push_back("新潟");
  for_each_with_index(std::begin(foo),std::end(foo),[](std::string& val,int index)
  {
    std::cout << index << "," << val << std::endl;
  });
  return 0;
}
0,東京
1,大阪
2,新潟

やはりFunctionの引数が増えたらまずいのかなぁ?
ぜひアドバイスください・・