title: Forward define struct AND type without any warnings
body: <p>Our universitie's homework submission system has - instead of focusing on programming skills - set ridiculous and impractical requirements on submissions. To bypass that, I use preprocesor and few other tricks to merge my homework solution into one file (one of the requirements).</p>
  
  <p>Another requirements is that <strong>no warnings</strong> must occur - and <code>-Wpedantic</code> is enabled. I forward-declare a <code>struct</code> in <strong><code>node.h</code></strong> so that I can use it in function calls:</p>
  
  <pre><code>typedef struct Edge Edge;
  // So that I can do:
  typedef struct Node {
      void* value;
      int name;
      Array* edges;
  } Node;
  Edge* node_find_edge(Node* node, NodeName target);
  </code></pre>
  
  <p>In a different file - <strong><code>edge.h</code></strong> - full definition reads as:</p>
  
  <pre><code>typedef struct Edge {
      size_t cost;
      NodeName A;
      NodeName B;
  } Edge;
  </code></pre>
  
  <p>I get this warning:</p>
  
  <pre><code>main.c: At top level:
  main.c:779:3: warning: redefinition of typedef 'Edge' [-Wpedantic]
   } Edge;
     ^
  main.c:753:21: note: previous declaration of 'Edge' was here
   typedef struct Edge Edge;
  </code></pre>
  
  <p>Don't get confused by the "main.c" thing, that simple because the files are merged as I said.</p>
  
  <p>What forward declaration is correct and warningless?</p>