title: The type 'T' must be convertible in order to use it as parameter 'T' in the generic type or method
body: <p>I have these two main classes. First the FSMSystem class:</p>
  
  <pre><code>public class FSMSystem&lt;T&gt; : MonoBehaviour where T : FSMSystem&lt;T&gt;
  {
      private T m_Owner = default(T);
  
      protected FSMState&lt;T&gt; currentState;
  
      private Dictionary&lt;int, FSMState&lt;T&gt;&gt; m_states;
  
      public FSMSystem(T owner)
      {
          m_Owner = GameObject.FindObjectOfType(typeof(T)) as T; //owner;
          m_states = new Dictionary&lt;int, FSMState&lt;T&gt;&gt;();
      }
  
      protected void AddState( FSMState&lt;T&gt; state )
      {
          m_states.Add( state.GetStateID(), state );
      }
  }
  </code></pre>
  
  <p>And the second class, FSMState:</p>
  
  <pre><code>public abstract class FSMState&lt;T&gt;
  {   
      public abstract int GetStateID();
  
      public abstract void OnEnter (FSMSystem&lt;T&gt; fsm, FSMState&lt;T&gt; prevState);
      public abstract void OnUpdate (FSMSystem&lt;T&gt; fsm);
      public abstract void OnExit (FSMSystem&lt;T&gt; fsm, FSMState&lt;T&gt; nextState);
  }
  </code></pre>
  
  <p>It leads to the following error:</p>
  
  <blockquote>
    <p>error CS0309: The type '<code>T</code>' must be convertible to '<code>FSMSystem&lt;T&gt;</code>' in
    order to use it as parameter '<code>T</code>' in the generic type or method
    '<code>FSMSystem&lt;T&gt;</code>'</p>
  </blockquote>
  
  <p>Can someone tell me how to resolve this? I see many other posts similar to this one but I'm not seeing the relationship.</p>