title: types in template specialization (unique_ptr for array types)
body: <p>unique_ptr has an option to take array types - to have correct deleter (with array delete[]) later:</p>
  
  <p><code>std::unique_ptr&lt;std::string[]&gt; up(new std::string[10]); // OK</code></p>
  
  <p>the definition of unique_ptr class itself include specialization for this type (note T[] braces near the definition itself):</p>
  
  <pre><code>template&lt;typename T, typename D&gt;
  class unique_ptr&lt;T[], D&gt; { ... }
  </code></pre>
  
  <p>but isn't it the string[] or int[] itself a type
  so it should be templated to the T type according to the definition not T[]?
  in other words HOW do the template engine differs between T and T[] (if we just substitute T for string[] - the T[] specialization should give us string[][] type or it shouldn't? 
  if we just typedef int[] for array_to_int type wouldnt the T[] substitution be array_to_int[] type (ie int[][] type)?</p>
  
  <p>in other words, we explicitly pass std::string[] TYPE to template in here
  <code>std::unique_ptr&lt;std::string[]&gt;</code>
  and it should be substituted to T itself , right? not T[] ?</p>