On Sunday, 27 January 2013 at 16:51:26 UTC, Philippe Sigaud wrote:
string hasDataMember( T )(string M )
{
return " __traits(compiles, {
Test t;
auto _ = t.D; // reading t.M
t." ~ M ~ " = t." ~ M ~ "; // assign to t.M
})";
}
What is the purpose of "auto _ = t.D;" ?
Just testing whether t.M can be assigned to something (ie, is
it a value?)
I use '_' as a variable name to indicate I don't care for it's
precise
name/value. It's just a placeholder.
Ok, I must be missing something, why "t.D" or is this just a
typo? And secondly wouldn't "x.M = y.M" take care of checking
that the member can be read and written to ? Also, doesn't your
solution require T to be default constructible ?
Using dmd 2.060 and command line "rdmd test.d", I get an
assertion fail on
both calls that check for a member "init" whether for int or
Test.
Using 2.061 here.
Well that was the problem! I was still using 2.060 which seems to
have the bug. Now that I've moved to 2.061 everything works as
expected (your implementation and mine).
Thanks,
Olivier.