title: C++ template parameter deduction for std::array with non size_t integer
body: <p>I'm trying to adapt the solution presented in <a href="https://stackoverflow.com/questions/21723799/avoiding-struct-in-variadic-template-function">Avoiding struct in variadic template function</a> to my need. However, I can't understand the the behavior of G++. Consider the following function: </p>
  
  <pre><code> template &lt;typename T, unsigned Size&gt;
   int nextline(const typename std::array&lt;T, Size&gt; ar) {
      return 0;
   }
  </code></pre>
  
  <p>Then the call </p>
  
  <pre><code> nextline(std::array&lt;int, 2&gt; { 1,0 });
  </code></pre>
  
  <p>doesn't match with GCC complaining with</p>
  
  <pre><code>eslong.cpp: In function ‘int main()’:
  eslong.cpp:10:38: error: no matching function for call to ‘nextline(std::array&lt;int, 2ul&gt;)’
     nextline(std::array&lt;int, 2&gt; { 1,0 });
                                        ^
  eslong.cpp:10:38: note: candidate is:
  eslong.cpp:4:5: note: template&lt;class T, unsigned int Size&gt; int nextline(std::array&lt;T, Size&gt;)
   int nextline(const typename std::array&lt;T, Size&gt; ar) {
       ^
  eslong.cpp:4:5: note:   template argument deduction/substitution failed:
  eslong.cpp:10:38: note:   mismatched types ‘unsigned int’ and ‘#‘integer_cst’ not supported by dump_type#&lt;type error&gt;’
     nextline(std::array&lt;int, 2&gt; { 1,0 });
                                        ^
  eslong.cpp:10:38: note:   ‘std::array&lt;int, 2ul&gt;’ is not derived from ‘std::array&lt;T, Size&gt;’
  </code></pre>
  
  <p>However it matches if I changes <code>unsigned Size</code> to <code>unsigned long Size</code> or <code>size_t</code>. I'm not sure to understand what's happening here. Isn't the <code>Size</code> parameter in the call to <code>std::array&lt;T, Size&gt;</code> converted to a <code>size_t</code> ?</p>