#include <iostream>
#include <functional>

class foo
{
public:
	void visitWith(const std::function<void(foo&)> &v) { v(*this); };
	void visitWith(const std::function<void(const foo&)> &v) const { v(*this); };
};
class bar {
  foo *f = new foo;
public:
  void visitFoosWith(const std::function<void(const foo&)>& v) const {
  	f->visitWith(v);   // Visual C++ doesn't like this
  }
};

int main()
{
	bar b;
	b.visitFoosWith([&](const foo&){ std::cout << "visited a const foo!" << std::endl; });
	return 0;
}
