title: How to use std::bind with none static member function?
body: <p>I'm trying to learn some basic c++11 concepts by implementing some well known design patterns. Currently I'm stuck at Callables while trying to implement the new Angular2 EventEmitter Pattern in C++.
  So here is the code if the comment stays all is ok:</p>
  
  <pre><code>class Controller {
  
  public:
  
  Controller() {
      const pattern::EventEmitter&lt;SwitchEvent&gt; listner;
      listner.subscribe([this](const SwitchEvent&amp; event) {
          if(event.get_state()) {
              this-&gt;_count++;
              std::cout &lt;&lt; "count: " &lt;&lt; this-&gt;_count &lt;&lt; std::endl;
          }
      });
      //listner.subscribe(std::bind(&amp;Controller::track, this));
  }
  
  private:
  
  int _count = 0;
  
  void track(const SwitchEvent&amp; event) {
      if(!event.get_state()) {
          this-&gt;_count++;
          std::cout &lt;&lt; "count: " &lt;&lt; this-&gt;_count &lt;&lt; std::endl;
      }
  }
  
  };
  </code></pre>
  
  <p>and the output is as expected:</p>
  
  <pre><code>$ g++ -std=c++11 -Wall test.cc
  $ ./a.out 
  count: 1 
  </code></pre>
  
  <p>But when I remove the comment I get an Error:</p>
  
  <pre><code>test.cc: In constructor ‘Controller::Controller()’:
  test.cc:50:62: error: no matching function for call to ‘pattern::EventEmitter&lt;SwitchEvent&gt;::subscribe(std::_Bind_helper&lt;false, void (Controller::*)(const SwitchEvent&amp;), Controller*&gt;::type) const’
       listner.subscribe(std::bind(&amp;Controller::track, this));
                                                            ^
  test.cc:50:62: note: candidate is:
  In file included from test.cc:1:0:
  EventEmitter.hh:16:6: note: void pattern::EventEmitter&lt;T&gt;::subscribe(const std::function&lt;void(const T&amp;)&gt;&amp;) const [with T = SwitchEvent]
  void subscribe(const std::function&lt;void(const T&amp;)&gt;&amp; listener) const {
    ^
  EventEmitter.hh:16:6: note:   no known conversion for argument 1 from ‘std::_Bind_helper&lt;false, void (Controller::*)(const SwitchEvent&amp;), Controller*&gt;::type {aka std::_Bind&lt;std::_Mem_fn&lt;void (Controller::*)(const SwitchEvent&amp;)&gt;(Controller*)&gt;}’ to ‘const std::function&lt;void(const SwitchEvent&amp;)&gt;&amp;’
  </code></pre>