title: What does six dots mean in variadic templates?
body: <p>The following are <em>some</em> partial specializations for <code>std::is_function</code> from libstdc++'s <code>&lt;type_traits&gt;</code>:</p>
  
  <pre><code>  /// is_function
    template&lt;typename&gt;
      struct is_function
      : public false_type { };
  
    template&lt;typename _Res, typename... _ArgTypes&gt;
      struct is_function&lt;_Res(_ArgTypes...)&gt;
      : public true_type { };
  
    template&lt;typename _Res, typename... _ArgTypes&gt;
      struct is_function&lt;_Res(_ArgTypes...) &amp;&gt;
      : public true_type { };
  
    template&lt;typename _Res, typename... _ArgTypes&gt;
      struct is_function&lt;_Res(_ArgTypes...) &amp;&amp;&gt;
      : public true_type { };
  
    template&lt;typename _Res, typename... _ArgTypes&gt;
      struct is_function&lt;_Res(_ArgTypes......)&gt;
      : public true_type { };
  
    template&lt;typename _Res, typename... _ArgTypes&gt;
      struct is_function&lt;_Res(_ArgTypes......) &amp;&gt;
      : public true_type { };
  
    template&lt;typename _Res, typename... _ArgTypes&gt;
      struct is_function&lt;_Res(_ArgTypes......) &amp;&amp;&gt;
      : public true_type { };
  </code></pre>
  
  <p>What exactly do the last three partial specializations mean, and how are they different from the first three? I tried searching for <code>......</code> in C++14 specification, but failed to find anything helpful.</p>