#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;
}