typedef int array[1];
array const* f( array* p ){ return p; }

このソースをコンパイルすると、

: In function `f':
:2: warning: return from incompatible pointer type

という警告がでます。
T* から T const* への変換なのですが、なぜ incompatible と言われるのでしょうか?
コンパイラは gcc (GCC) 3.3.1 (cygming special) です。
ちなみに、同じソースをC++としてコンパイルすると警告は出ません。