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


Reply via email to