opCmp with and without const
Basile B.
b2.temp at gmx.com
Fri Dec 6 08:55:29 UTC 2019
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
More information about the Digitalmars-d-learn
mailing list