title: How does std::index_sequence_for<T... >() exactly work?
body: <p>I have the following code</p>
  
  <pre><code>#include&lt;iostream&gt;
  #include &lt;tuple&gt;
  #include&lt;utility&gt;
  using namespace std::literals::string_literals;
  
  
  template&lt; typename tupleType, size_t ... inds &gt;
  void printTupleH(const tupleType&amp; tuple, std::index_sequence&lt;inds ...&gt;){
  
      ((std::cout &lt;&lt; std::get&lt;inds&gt;(tuple) &lt;&lt; " "), ..., (std::cout &lt;&lt; "\n"));
  }
  
  
  template&lt; typename ... tupleElementsTypes&gt;
  void printTuple(const std::tuple&lt;tupleElementsTypes ...&gt;&amp; tuple){
  
      printTupleH&lt; std::tuple&lt;tupleElementsTypes ...&gt;, std::index_sequence_for&lt;tupleElementsTypes... &gt;()  &gt;(tuple, std::index_sequence_for&lt;tupleElementsTypes...&gt;() );
  }
  
  
  int main() {
      auto myTuple{std::make_tuple(1, 0.5, "erfevev"s, "dsfgsfgsf",'g',true,0x44,999999999999999999,9.999999999)};
  
      printTuple(myTuple);
  
  }
  </code></pre>
  
  <p>I don't know what's wrong with this </p>
  
  <pre><code>printTupleH&lt; std::tuple&lt;tupleElementsTypes ...&gt;, std::index_sequence_for&lt;tupleElementsTypes... &gt;()  &gt; As the IDE says.
  </code></pre>
  
  <p>When I leave the function call without any template args the deduction works well.</p>
  
  <p>What I know is <code>std::index_sequence_for&lt;tupleElementsTypes... &gt;()</code> should expand to <code>0,1,2,..N-1</code> . So what's wrong.</p>