void Func(typename std::iterator_traits<hogehoge<TSomeClass>::iterator>::value_type && v1,
typename std::iterator_traits<hogehoge<TSomeClass>::iterator>::value_type && v2
typename std::iterator_traits<hogehoge<TSomeClass>::iterator>::value_type && v3) { 〜

このくそったれな宣言が↓これだけですむんだぞ。どうみてもこちらのが便利だろ

void Func(v1, v2, v3)
typename std::iterator_traits<hogehoge<TSomeClass>::iterator>::value_type && v1, v2, v3; { 〜