title: What is angle brackets for argument values, and what is it used for?
body: <p>I am used to angle brackets being used to specify a type, as a parameter:</p>
  
  <pre><code>vector&lt;int&gt; vecOfInts ;
  </code></pre>
  
  <p>But in <a href="https://github.com/miloyip/rapidjson" rel="nofollow noreferrer">rapidjson</a>, there is code like this:</p>
  
  <pre><code>document.Parse&lt;0&gt;(json) ;
  </code></pre>
  
  <p>The <code>document.Parse</code> method's signature is:</p>
  
  <pre><code>template &lt;unsigned parseFlags&gt;
  GenericDocument&amp; Parse(const Ch* str) {
      RAPIDJSON_ASSERT(!(parseFlags &amp; kParseInsituFlag));
      GenericStringStream&lt;Encoding&gt; s(str);
      return ParseStream&lt;parseFlags&gt;(s);
  }
  </code></pre>
  
  <p>I didn't know you could pass a <em>value</em> inside angle brackets - thought angle brackets were used for typenames alone.</p>
  
  <p>What is the code here doing, and why is he passing a <em>value</em> in the angle brackets?</p>
  
  <p>Is this a good idea?  When?</p>