title: What are second <> after function name in template funciton declaration?
body: <p>In a Stroustrup &quot;A Tour of C++&quot; he wrote example of find_all as</p>
  <pre><code>template&lt;typename C, typename V&gt;
  vector&lt;typename C::iterator&gt; find_all(C&amp; c, V v)
  // find all occurrences of v in c
  {
  vector&lt;typename C::iterator&gt; res;
  for (auto p = c.begin(); p!=c.end(); ++p)
  if (∗p==v)
  res.push_back(p);
  return res;
  }
  </code></pre>
  <p>What is <code>typename C::iterator</code> in  <code>template&lt;typename C, typename V&gt;  vector&lt;typename C::iterator&gt; find_all</code>? I haven't seen &lt;&gt; being both before and after function name. What is this construction and how it words?
  In book he wrote</p>
  <pre><code>The typename is needed to inform the compiler that C’s iterator is supposed to be a type and not a
  value of some type, say, the integer 7. We can hide this implementation detail by introducing a type
  alias (§6.4.2) for Iterator:
  template&lt;typename T&gt;
  using Iterator = typename T::iterator;
  // T’s iterator
  template&lt;typename C, typename V&gt;
  vector&lt;Iterator&lt;C&gt;&gt; find_all(C&amp; c, V v)
  // find all occurrences of v in c
  {
  ...
  </code></pre>
  <p>Which doesn't make things clearer. I understand what <code>using Iterator = typename T::iterator;</code> is, but it doesn't explain second &lt;&gt; usage.</p>