Bug 8407 – Add inout inference to member functions in templates

Status
NEW
Severity
enhancement
Priority
P4
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2012-07-21T17:28:36Z
Last change time
2024-12-13T18:00:41Z
Assigned to
No Owner
Creator
Jonathan M Davis
Moved to GitHub: dmd#18454 →

Comments

Comment #0 by issues.dlang — 2012-07-21T17:28:36Z
In an attempt to make std.range.Cycle const-correct, I had to do stuff like this: @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).
Comment #1 by schveiguy — 2015-01-08T12:48:44Z
A similar request came up in the forums. I think inferring const or inout would absolutely help quite a few cases where templates are used.
Comment #2 by robert.schadek — 2024-12-13T18:00:41Z
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/dmd/issues/18454 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB