#include <iostream>
#include <algorithm>
#include <vector>
using Iterator=std::vector<int>::iterator;
template<class Func>
void foo(Iterator begin,Iterator end,Func f)
{
for(Iterator it=begin; it != end-1;++it)
{
auto f2=[&begin,&f](int& lhs,int& rhs){
std::cout<<&(*begin)<<"\n"<<&lhs<<" "<<&rhs;
f(lhs,rhs);
};
f2(*it,*(it+1));
}
}
int main()
{
std::vector<int> a{1,5,3,4,7};
foo(a.begin(),a.end(),[](int& lhs,int& rhs){
std::cout<<"\n"<<&lhs<<" "<<&rhs<<"\n\n\n";
});
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8dmVjdG9yPgoKdXNpbmcgSXRlcmF0b3I9c3RkOjp2ZWN0b3I8aW50Pjo6aXRlcmF0b3I7CnRlbXBsYXRlPGNsYXNzIEZ1bmM+CnZvaWQgZm9vKEl0ZXJhdG9yIGJlZ2luLEl0ZXJhdG9yIGVuZCxGdW5jIGYpCnsKICAgIGZvcihJdGVyYXRvciBpdD1iZWdpbjsgaXQgIT0gZW5kLTE7KytpdCkKICAgIHsKICAgICAgICAgYXV0byBmMj1bJmJlZ2luLCZmXShpbnQmIGxocyxpbnQmIHJocyl7CiAgICAgICAgICAgIHN0ZDo6Y291dDw8JigqYmVnaW4pPDwiXG4iPDwmbGhzPDwiICAiPDwmcmhzOwogICAgICAgICAgICBmKGxocyxyaHMpOwogICAgICAgIH07CgogICAgICAgICBmMigqaXQsKihpdCsxKSk7CiAgICB9Cn0KCmludCBtYWluKCkKewogICAgc3RkOjp2ZWN0b3I8aW50PiBhezEsNSwzLDQsN307CgogICAgZm9vKGEuYmVnaW4oKSxhLmVuZCgpLFtdKGludCYgbGhzLGludCYgcmhzKXsKICAgICAgICBzdGQ6OmNvdXQ8PCJcbiI8PCZsaHM8PCIgICI8PCZyaHM8PCJcblxuXG4iOwogICAgfSk7Cn0K