On Mon, 23 Jun 2014 16:30:41 -0400, Ali Çehreli <[email protected]> wrote:

In C and C++, void* is for data pointers but it works (by accident?) for function pointers on all popular platforms.

Doing a bit of research, it seems that it is architecture dependent. For instance, a memory model may use pointers that are larger for function addresses than for object pointers. In this case, casting to and from void * would lose data.

But most platforms have the same pointer width for both data and functions. So it works, not by accident, but because that's what the architecture dictates.

I think it's important to state that the conversion from function pointer to void pointer is not specified as "undefined", but actually just not specified at all. I would say it's architecture-defined.

Does D have anything to say about this topic?

Since most architectures use same-size words for function addresses and object addresses, D would be fine to say it's defined and valid. I think the extreme outliers are architectures that are not equal, and D will not be harmed too badly by making this distinction. Any D flavor that would be ported to such an architecture may have to be a derived language.

-Steve

Reply via email to