On 10/30/2012 09:16 PM, Tobias Pankrath wrote:
On Tuesday, 30 October 2012 at 19:16:18 UTC, Dan wrote:
So until this bug is fixed any time I have any dynamic array,
including string in struct S, implement opEquals. When the bug is
fixed I can remove them. What I didn't realize is that including an
opEquals in A will cause generation of opEquals in B,C,D for free
(maybe only if called).

If this is still off base please let me know.

Thanks
Dan

In the meantime you can use this function template to compare structs
field by field.

bool oneStepEqual(T,F)(ref T lhs, ref F rhs)
     if(is(Unqual!T == Unqual!F) && is(T == struct))
{
         bool result = true;
     foreach(mem; __traits(allMembers, T))
     {
         static if(!is(typeof(__traits(getMember, T, mem)) == function))
         {
             result = result && (__traits(getMember, lhs, mem) ==
__traits(getMember, rhs, mem));
         }
     }
     return result;
}


You might want to shortcut after the first failed comparison.

Reply via email to