Trong void* a, ađược khai báo là một con trỏ không phải đến một voidkiểu mà là "bất kỳ" kiểu nào (trường hợp đặc biệt). Tất nhiên, một địa chỉ (vị trí trong bộ nhớ) được gán acho bất kỳ biến nào khác đang được khai báo.
Sau đó, biểu thức &ađược đánh giá để khởi tạo biến (cũng được a, nhưng điều này không liên quan) vừa được khai báo. Loại &alà "con trỏ tới con trỏ đến bất kỳ loại nào", là một trường hợp đặc biệt của "con trỏ tới bất kỳ loại nào", hoàn toàn tương thích với loạia . Ergo, không có thông báo trình biên dịch.
Hệ quả: không sử dụng void*nếu bạn muốn kiểm tra kiểu mạnh. Bất cứ điều gì có thể được chuyển đổi sang nó. Chỉ ngược lại theo hướng ngược lại, ngoại trừ void*chính nó (sẽ là một ngoại lệ không cần thiết khi một loại không tương thích với chính nó).
Ngoài ra, AFAIR điều này thực sự đến từ C.