title: Cause compilation error in C89 if two types are not the same
body: <p>Using only the features of C89, given</p>
  
  <pre><code>typedef [unspecified token sequence] T1;
  typedef [another unspecified token sequence] T2;
  </code></pre>
  
  <p>exhibit a language construct which will compile without error if and only if T1 and T2 are <em>the same type</em> (not just compatible).  The limitation to C89 is because this is going into an autoconf probe.</p>
  
  <p><strong>EDIT:</strong> I need a solution which works even if T1 or T2 or both are incomplete types.  Sorry for not mentioning this before.</p>
  
  <p><strong>SON OF EDIT:</strong> All three current answers only detect <em>compatible</em> types.  This turns out to be much closer to "the same type" than I remembered, close enough for my current purposes, but out of curiosity I am still looking for an answer that detects <em>the same</em> type.  Here are some pairs of types that are compatible but not the same:</p>
  
  <pre><code>typedef void (*T1)(void);
  typedef void (*T2)();
  
  typedef float T1[];
  typedef float T2[12];
  
  typedef enum { ONE, TWO, THREE } T1;
  typedef /* implementation-defined integer type */ T2;
  </code></pre>