title: invalid use of incomplete type
body: <p>I'm trying to use a typedef from a subclass in my project, I've isolated my problem in the example below.</p>
  
  <p>Does anyone know where I'm going wrong?</p>
  
  <pre><code>template&lt;typename Subclass&gt;
  class A {
      public:
          //Why doesn't it like this?
          void action(typename Subclass::mytype var) {
              (static_cast&lt;Subclass*&gt;(this))-&gt;do_action(var);
          }
  };
  
  class B : public A&lt;B&gt; {
      public:
          typedef int mytype;
  
          B() {}
  
          void do_action(mytype var) {
              // Do stuff
          }
  };
  
  int main(int argc, char** argv) {
      B myInstance;
      return 0;
  }
  </code></pre>
  
  <p>This is the output I get:</p>
  
  <pre><code>sean@SEAN-PC:~/Documents/LucadeStudios/experiments$ g++ -o test test.cpp
  test.cpp: In instantiation of ‘A&lt;B&gt;’:
  test.cpp:10:   instantiated from here
  test.cpp:5: error: invalid use of incomplete type ‘class B’
  test.cpp:10: error: forward declaration of ‘class B’
  </code></pre>