title: Template specialization on template member of template class
body: <p>This is probably only a syntax problem.</p>
  
  <p>So i have this template class :</p>
  
  <pre><code>template &lt;typename String, template&lt;class&gt; class Allocator&gt;
  class basic_data_object
  {
    template&lt;typename T&gt;
    using array_container = std::vector&lt;T, Allocator&lt;T&gt;&gt;;
  };
  </code></pre>
  
  <p>And another one :</p>
  
  <pre><code>template &lt;typename String, template&lt;class&gt; class Allocator, typename T&gt;
  struct get_data_object_value
  {
  };
  </code></pre>
  
  <p>Now i want to specialize the second one's <code>T</code> parameter with the first one's inner typedef <code>array_container</code> for any given type.</p>
  
  <pre><code>template &lt;typename String, template&lt;class&gt; class Allocator, typename T&gt;
  struct get_data_object_value
  &lt;String, Allocator,
  typename basic_data_object&lt;String, Allocator&gt;::template array_container&lt;T&gt;&gt;
  {
  };
  </code></pre>
  
  <p>But this specialization doesn't seem to be matched when i pass an std::vector as the last parameter.</p>
  
  <p>If i create a temporary hard coded typedef:</p>
  
  <pre><code>typedef basic_data_object&lt;std::string, std::allocator&lt;std::string&gt;&gt; data_object;
  </code></pre>
  
  <p>And use it for the specialization, everything works :</p>
  
  <pre><code>template &lt;typename String, template&lt;class&gt; class Allocator, typename T&gt;
  struct get_data_object_value
  &lt;String, Allocator,
  data_object::template array_container&lt;T&gt;&gt;
  {
  };
  </code></pre>
  
  <p>What did i miss ? :)</p>
  
  <hr>
  
  <p>Alternatively what is the best (smallest / cleanest) way to make this work ?</p>