IsValueType template? std.traits.hasAliasing?

dsimcha dsimcha at yahoo.com
Tue Jan 27 18:09:25 PST 2009


== Quote from Bill Baxter (wbaxter at gmail.com)'s article
> Does anyone have a good template for checking if a struct is
> semantically a pure value type or not?
> I found "hasAliasing" in D2 which is close, but it seems to report
> true even for static arrays.
> struct X { float[3] vals; }
> pragma(msg, hasAliasing!(X)?"true":"false"); --> true
> Maybe that's just a bug in hasAliasing?
> What I want to know is if     X=Y will give me an X that is
> independent of Y.  I think that is the same question hasAliasing is
> trying to answer.  If so then it's a bug.
> --bb

Here's a really ugly, brute force hack that does what you need:

http://dsource.org/projects/dstats/browser/trunk/alloc.d

I actually needed it in dstats to support newVoid(), which is a speed hack to
allocate arrays w/o initializing the contents, to tell the GC whether to scan for
pointers.  Actually, on looking at it again, it should probably be changed to make
function pointers and delegates return false.

Not sure if this is what you were looking for.  By semantically a pure value type,
do you mean that immutable reference data should or sould not be included?



More information about the Digitalmars-d mailing list