#include <iostream>
#include <string>
#include <utility>
#include <vector>
using std::next;
template<typename Iter, typename Func, typename...Funcs>
void RotateHandlers(Iter b, Iter e, Func f, Funcs...fs) {
    if (b != e) {
        f(*b);
        RotateHandlers(next(b), e, fs..., f);
    }
}

int main() {
    std::vector<std::string> v({"Hello", "world", "it's", "really", "great", "to", "be", "here"});
    RotateHandlers(v.begin(), v.end(),
      [](const std::string& s){std::cout << "First|" << s << std::endl;},
      [](const std::string& s){std::cout << "Then |" << s << std::endl;},
      [](const std::string& s){std::cout << "And  |" << s << std::endl
                                         << "     |" << std::string(s.size(), '-') << std::endl;}
    );
    return 0;
}