title: Enforce strong type checking in C (type strictness for typedefs)
body: <p>Is there a way to enforce explicit cast for typedefs of the same type? I've to deal with utf8 and sometimes I get confused with the indices for the character count and the byte count. So it be nice to have some typedefs:</p>
  
  <pre><code>typedef unsigned int char_idx_t;
  typedef unsigned int byte_idx_t;
  </code></pre>
  
  <p>With the addition that you need an explicit cast between them:</p>
  
  <pre><code>char_idx_t a = 0;
  byte_idx_t b;
  
  b = a; // compile warning
  b = (byte_idx_t) a; // ok
  </code></pre>
  
  <p>I know that such a feature doesn't exist in C, but maybe you know a trick or a compiler extension (preferable gcc) that does that.</p>
  
  <hr>
  
  <p><strong>EDIT</strong>
  I still don't really like the Hungarian notation in general. I couldn't use it for this problem because of project coding conventions, but I used it now in another similar case, where also the types are the same and the meanings are very similar. And I have to admit: it helps. I never would go and declare every integer with a starting "i", but as in Joel's example for overlapping types, it can be life saving.</p>