title: Make sure that typename type is a Derived of Base
body: <p>I've this kind of code</p>
  
  <pre class="lang-cpp prettyprint-override"><code>template &lt;typename D, typename T&gt;
  class tl1 {
      std::list&lt;T&gt; mTs ;
  public:
      T &amp; getTbyName() const ;
  }
  
  template &lt;typename T, typename C&gt;
  class tl2 {
  public:
      std::string getName() { return mName ; }
  private:
      C &amp; mC ;
      std::string mName
  }
  
  class c2 ;
  
  class cl1 : tl1&lt;cl1, cl2&gt;  {
  
  }
  class cl2 : tl2&lt;cl2, cl1&gt;  {
  
  }
  </code></pre>
  
  <p>How could I check (at <code>compile time</code>) that <code>T</code> is <code>cl2</code> type or <code>derived from cl2</code> and <code>C</code> is <code>cl1</code> type or <code>derived from cl1</code>. I need to be sure about cl2 type or the <code>getTbyName</code> will be a mess.</p>
  
  <p>Thank you for your time<br>
  Quentin</p>