title: Invalid conversion from unsigned char* to char*
body: <p>Here is a code -</p>
  
  <pre><code>  1 int main(int argc, char *argv[])
    2 {
    3     signed char S, *psc;
    4     unsigned char U,  *pusc;
    5     char C, *pc;
    6 
    7     C = S;
    8     C = U;
    9 
   10     pc = psc;
   11     pc = pusc;
   12 
   13     return 0;
   14 }
  
  $ gcc test.cpp -o a
  test.cpp: In function ‘int main(int, char**)’:
  test.cpp:10:7: error: invalid conversion from ‘signed char*’ to ‘char*’ [-fpermissive]
  test.cpp:11:7: error: invalid conversion from ‘unsigned char*’ to ‘char*’ [-fpermissive]
  </code></pre>
  
  <p>This is compiled on gcc version 4.6.3 on Ubuntu 12.10 on an Intel 32-bit machine.</p>
  
  <p>Considering that <strong><code>char</code> type is <code>unsigned char</code> on x86.</strong> - </p>
  
  <p>If assignments on line 7 and 8 for non-pointer types are Ok, why errors are thrown for pointer types on lines 10 and 11 ?</p>
  
  <p>Also, should <code>C = U</code> succeeds without requiring a cast?</p>