#include <iostream>
#include <vector>
using namespace std;
struct hurg {
int x;
};
class furg {
public:
template <class F>
void for_each_hurg(F&& f) const {
for (auto& h : hurgs) {
f(h);
}
}
/*template <class F>
void for_each_hurg(F&& f) {
for (auto& h : hurgs) {
f(h);
}
}*/
template <class F>
void for_each_hurg(F&& f) {
const_cast<const furg&>(*this).for_each_hurg([&f](const hurg& h) {
f(const_cast<hurg&>(h));
});
}
private:
std::vector<hurg> hurgs;
};
int main() {
furg f;
const auto& cf = f;
f.for_each_hurg([](hurg& h) { });
cf.for_each_hurg([](const hurg& h) { });
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IGh1cmcgewoJaW50IHg7Cn07CgpjbGFzcyBmdXJnIHsKcHVibGljOgogICAgdGVtcGxhdGUgPGNsYXNzIEY+CiAgICB2b2lkIGZvcl9lYWNoX2h1cmcoRiYmIGYpIGNvbnN0IHsKICAgIAlmb3IgKGF1dG8mIGggOiBodXJncykgewogICAgCQlmKGgpOwogICAgCX0KICAgIH0KICAgIAogICAgLyp0ZW1wbGF0ZSA8Y2xhc3MgRj4KICAgIHZvaWQgZm9yX2VhY2hfaHVyZyhGJiYgZikgewogICAgCWZvciAoYXV0byYgaCA6IGh1cmdzKSB7CiAgICAJCWYoaCk7CiAgICAJfQogICAgfSovCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgRj4KCXZvaWQgZm9yX2VhY2hfaHVyZyhGJiYgZikgewogICAgICAgIGNvbnN0X2Nhc3Q8Y29uc3QgZnVyZyY+KCp0aGlzKS5mb3JfZWFjaF9odXJnKFsmZl0oY29uc3QgaHVyZyYgaCkgewogICAgICAgIAlmKGNvbnN0X2Nhc3Q8aHVyZyY+KGgpKTsKICAgICAgICB9KTsKICAgIH0gICAgCiAgICAKCnByaXZhdGU6CiAgICBzdGQ6OnZlY3RvcjxodXJnPiBodXJnczsKfTsKCmludCBtYWluKCkgewoJZnVyZyBmOwoJY29uc3QgYXV0byYgY2YgPSBmOwoJCglmLmZvcl9lYWNoX2h1cmcoW10oaHVyZyYgaCkgeyB9KTsKCWNmLmZvcl9lYWNoX2h1cmcoW10oY29uc3QgaHVyZyYgaCkgeyB9KTsKCglyZXR1cm4gMDsKfQ==