title: boost bind variadics overload resolution
body: <pre><code> #include &lt;cstdio&gt;
   #include &lt;string&gt;
   #include &lt;boost/bind.hpp&gt;
   #include &lt;boost/function.hpp&gt;
   #include &lt;boost/lexical_cast.hpp&gt;
  
   struct CLASS{
  
     template&lt;typename T, typename ... Args&gt;
     void enqueue(T const &amp; t, Args const &amp; ... args){
        this-&gt;concatenate(t,args ...);
     }
  
     template&lt;typename T, typename ... Args&gt;
     void concatenate(T t, Args ... args){
        boost::function&lt;void()&gt; f 
              = boost::bind(&amp;CLASS::push_,this,
                            boost::bind(&amp;CLASS::stringer&lt;T const &amp;,
                                        Args const &amp; ...&gt;,
                                        this,boost::ref(t),boost::ref(args)...));
     }
  
     template&lt;typename T, typename ... Args&gt;
     std::string stringer(T const &amp; t, Args const &amp; ... args){
        return stringer(t) + stringer(args...);
     }
  
  
     template &lt;typename T&gt;
     std::string stringer(T const &amp; t){
        return boost::lexical_cast&lt;std::string&gt;(t);
     }
  
     void push_(std::string const &amp; s){
        std::fprintf(stderr,"%s\n",s.c_str());
     }
  
  };
  
  
  
   int main(){
  
      CLASS c;
  
      c.enqueue(42,"hello",35);
  
      // below commented enqueue fails to compile
      //c.enqueue("abc", 100," for ", 42000,"sadada ", 4.3, "zzzzz\n",42,42);                                   
  
      return 0;
   }
  </code></pre>
  
  <p>In the main function above, the commented line fails to compile, although the uncommented enqueue does work. I have a feeling the problem is to do with the unwinding of the variadics by the stringer function and boost::bind failing to figure out overloads or something. 
  How do I solve this problem, so that enqueue works for any combination of inputs?</p>