#include <iostream>
#include <functional>

class foo
{
public:
	void visitWith(std::function<void(foo&)> v) { v(*this); }
	void visitWith(std::function<void(const foo&)> v) const { v(*this); }
};

int main()
{
	foo f;
	f.visitWith([&](foo&){ std::cout << "visited with non-const" << std::endl; });
	f.visitWith([&](const foo&){ std::cout << "visited with const" << std::endl; });
	return 0;
}