IsValueType template? std.traits.hasAliasing?

dsimcha dsimcha at yahoo.com
Tue Jan 27 18:11:07 PST 2009


== Quote from dsimcha (dsimcha at yahoo.com)'s article
> == 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?

Forgot to mention:  It's isReferenceType, about 1/3 of the way down.



More information about the Digitalmars-d mailing list