#include <iostream>
#include <vector>
template <class Container, class Function>
struct Invoker {
const Container& invoke(const Container &container, Function function)
{
for (auto &value : container) function(value);
}
Container& invoke(Container &container, Function function)
{
for (auto &value : container) function(value);
}
};
int main() {
std::vector<int> container {1, 2, 3};
auto fn = [](int val) {
std::cout << val << std::endl;
};
Invoker<decltype(container), decltype(fn)>().invoke(container, fn);
return 0;
}
ICAgICNpbmNsdWRlIDxpb3N0cmVhbT4KICAgICNpbmNsdWRlIDx2ZWN0b3I+CiAgICAKICAgIHRlbXBsYXRlIDxjbGFzcyBDb250YWluZXIsIGNsYXNzIEZ1bmN0aW9uPgogICAgc3RydWN0IEludm9rZXIgewogICAgCiAgICAgICAgY29uc3QgQ29udGFpbmVyJiBpbnZva2UoY29uc3QgQ29udGFpbmVyICZjb250YWluZXIsIEZ1bmN0aW9uIGZ1bmN0aW9uKQogICAgICAgIHsKICAgICAgICAgICAgZm9yIChhdXRvICZ2YWx1ZSA6IGNvbnRhaW5lcikgZnVuY3Rpb24odmFsdWUpOwogICAgICAgIH0KICAgIAogICAgICAgIENvbnRhaW5lciYgaW52b2tlKENvbnRhaW5lciAmY29udGFpbmVyLCBGdW5jdGlvbiBmdW5jdGlvbikKICAgICAgICB7CiAgICAgICAgICAgIGZvciAoYXV0byAmdmFsdWUgOiBjb250YWluZXIpIGZ1bmN0aW9uKHZhbHVlKTsKICAgICAgICB9CiAgICAKICAgIH07CiAgICAKICAgIGludCBtYWluKCkgewogICAgCiAgICAgICAgc3RkOjp2ZWN0b3I8aW50PiBjb250YWluZXIgezEsIDIsIDN9OwogICAgICAgIGF1dG8gZm4gPSBbXShpbnQgdmFsKSB7CiAgICAgICAgICAgIHN0ZDo6Y291dCA8PCB2YWwgPDwgc3RkOjplbmRsOwogICAgICAgIH07CiAgICAKICAgICAgICBJbnZva2VyPGRlY2x0eXBlKGNvbnRhaW5lciksIGRlY2x0eXBlKGZuKT4oKS5pbnZva2UoY29udGFpbmVyLCBmbik7CiAgICAKICAgICAgICByZXR1cm4gMDsKICAgIH0K