On Wed, 24 Feb 2016 21:48:14 +0000, mahdi wrote: > Suppose we have a function like this: > > void diss(int[] array) ... > > How can we detect is `array` is static (fixed size) or dynamic, > inside the function body?
Static arrays point to memory on the stack, inside an aggregate type on the heap, or inside the static data area. In the stack case, you can use this strategy: extern (C) void* thread_stackBottom(); bool isLocatedOnStack(T)(T[] arr) { int i; void* top = &i; auto bottom = thread_stackBottom(); return arr.ptr >= min(top, bottom) && arr.ptr <= max(top, bottom); } When you get to GC-allocated stuff, there's no way to tell. Static data, I'm not sure. This probably isn't what you want, though.