Summary: Add inout inferrence to member functions in templates
           Product: D
           Version: unspecified
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: enhancement
          Priority: P2
         Component: DMD

--- Comment #0 from Jonathan M Davis <> 2012-07-21 17:28:36 
PDT ---
In an attempt to make std.range.Cycle const-correct, I had to do stuff like

    @property auto ref front()
        return _original[_index % _original.length];

    static if (is(typeof((cast(const R)_original)[0])) &&
               is(typeof((cast(const R)_original).length)))
        @property auto const ref front() const
            return _original[_index % _original.length];

In the associated review,Aandrei mentioned the possibility of adding const
inferrence to the list of attributes that are inferred for templated member
functions. And I think that this code highlights the need for something along
those lines.

However, given the fact that there are many cases where you want both a
non-const function which returns a non-const result and const function which
returns a const result (as is the case in the example above), I think that
inout inferrence would be a better choice (though if the return type doesn't
have to be const on a const function and inout doesn't work with that, then
inferring const would be fine then).

Configure issuemail:
------- You are receiving this mail because: -------

Reply via email to