title: what does this template do?
body: <p>In the llvm source code <code>llvm/IR/PassManager.h</code> has this template (comments have been deleted for brevity):</p>
  <pre><code>struct alignas(8) AnalysisKey {};
  struct alignas(8) AnalysisSetKey {};
  template &lt;typename IRUnitT&gt; class AllAnalysesOn {
  public:
    static AnalysisSetKey *ID() { return &amp;SetKey; }
  
  private:
    static AnalysisSetKey SetKey;
  };
  
  template &lt;typename IRUnitT&gt; AnalysisSetKey AllAnalysesOn&lt;IRUnitT&gt;::SetKey;
  </code></pre>
  <p><strong>edit:</strong> I'm confused only about this: <code>template &lt;typename IRUnitT&gt; AnalysisSetKey AllAnalysesOn&lt;IRUnitT&gt;::SetKey; </code></p>
  <p>I'm familiar with using a template for a class or a function. The above usage appears very different. Instead of the template definition being followed by a class or a function, it's followed by a struct and then a class member variable. Any insight into what this does or why it is written this way would be appreciated.</p>