title: std::function extract and remove argument
body: <p>I'm learning c++11/14 these days and it seems like a whole new language to me with all the great additions but I still can't quite make use of all these new features:</p>
  
  <pre><code>typedef std::function&lt;void()&gt; void_f;
  
  typedef std::function&lt;void(int a, void_f b)&gt; f1;
  typedef std::function&lt;void(int a, std::function&lt;void(void_f f)&gt; c, void_f b)&gt; f2; // this order is wanted
  
  std::vector&lt;f1&gt; v;
  
  void add(f1 f)
  {
      v.push_back(f);
  }
  
  void add(f2 f)
  {
       v.push_back(f) // ?
   // I want to extract 'void_f f' argument from std::function for later use 
  //and remove std::function completely to get same signature as f1
  }
  </code></pre>
  
  <p>I've been looking at std::move, std::bind, std::forward, std::placeholders but I can't seem to find anything like this. Maybe I should save longer version in vector and then bind empty lambda for shorter one?</p>