On Friday, 6 December 2019 at 07:03:45 UTC, berni44 wrote:
In std.typecons, in Tuple there are two opCmp functions, that
are almost identical; they only differ by one being const and
the other not:
int opCmp(R)(R rhs)
if (areCompatibleTuples!(typeof(this), R, "<"))
{
static foreach (i; 0 .. Types.length)
{
if (field[i] != rhs.field[i])
{
return field[i] < rhs.field[i] ? -1 : 1;
}
}
return 0;
}
int opCmp(R)(R rhs) const
if (areCompatibleTuples!(typeof(this), R, "<"))
{
static foreach (i; 0 .. Types.length)
{
if (field[i] != rhs.field[i])
{
return field[i] < rhs.field[i] ? -1 : 1;
}
}
return 0;
}
What is the reason for having this? (I guess, that it's because
the function may indirectly call opCmp of other types which may
or may not be const.)
My real question is: Can this code duplication be avoided
somehow?
Usually `inout` is used. I'm pretty sure this is not possible
here otherwise it would be done to avoid the dup.
(I ask, because I've got a PR running, which increases the size
of these functions and it doesn't feel good to have two long,
almost identical functions.)
Well the content of body could be mixed in