Pure functions and pointers (yes, again)

Denis Shelomovskij verylonglogin.reg at gmail.com
Wed Jul 4 00:59:10 PDT 2012


Since issue 8185 has been closed, I'm still very confused. I just 
understood that endless discussion doesn't result in anything.

See example from http://d.puremagic.com/issues/show_bug.cgi?id=8185#c40
---
int f(size_t p) pure
{
     return *cast(int*) p;
}

void g(size_t p, ref size_t) pure
{
     ++*cast(int*) p;
}

void h(size_t a, size_t b) pure
{
     int res = f(a);
     g(b, b);
     assert(res == f(a)); // may fail, no guaranties by language!
}

void main()
{
     int a;
     h(cast(size_t) &a, cast(size_t) &a);
}
---

Jonathan M Davis (whose documentation correcting pull closed the issue) 
told me that this code result in undefined behaviour. What _exectly_ 
language rule this violates? I don't see this rule, but if there is no 
such rule, how can we treat anything as strongly pure function?

-- 
Денис В. Шеломовский
Denis V. Shelomovskij



More information about the Digitalmars-d mailing list