Ponieważ o ile pamietam dla gcc pointer jest tylko "wartością" i nie zawiera innych znaczeń. To ogranieczenie pochodzi z faktu że developing gcc odbywał się na w miarę normalnych architekturach gdzie nie był to kłopot i tak zostało.
Problem tak naprawde nie jest w gcc tylko w C/C++ (np wskaźnik na funkcje nie jest kompatybilny z void* [1] co jest zrobione m.in. z powodu jakiś dziwacznych architektur).
Nie wie. Byly próby aby się dowiedział w postaci propozycji zmiany. Zdaje się że nie udało się wpuscić tego do mainstream, spodziewam się że takie ficzery trafią wcześniej do clang. Nie mogę teraz znaleźć pdfa który tą zmianę prezentował, jak znajdę to go tu wrzucę.
[1]