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.

Reply via email to