On 07/09/2012 02:24 AM, monarch_dodra wrote: > On Monday, 2 July 2012 at 12:44:59 UTC, monarch_dodra wrote: >> ... > > I opened this thread a week ago, and got little no feed back.
Please also consider the D.learn newsgroup. Some people are more responsive over there. :) (And you may have already asked there anyway. :))
> import std.stdio; > import std.algorithm; > import std.container; > > void main() > { > Array!int arr = Array!int(1, 2, 3, 4, 5); > foreach(ref a; arr[]) > { > a = 10; > } > writeln("Output: ", arr[]); > } > ---- > Output: [1, 2, 3, 4, 5] > ---- Yet using the InputRange functions directly works: Array!int arr = Array!int(1, 2, 3, 4, 5); auto all = arr[]; for ( ; !all.empty; all.popFront()) { all.front = 10; } Now, the output: [10, 10, 10, 10, 10] Using for and indexes also works: Array!int arr = Array!int(1, 2, 3, 4, 5); auto all = arr[]; for (auto i = 0; i != all.length; ++i) { all[i] = 10; } Again, the output: [10, 10, 10, 10, 10] > I realize I'm still new to D, but I'd appreciate if somebody told me if > I am wrong(or being stupid). I have found std.container to be confusing. > Anyways, I'm bothered by several things: > > Quoteth "The D programing language", 12.9.1: "If you specify ref with > value, the compiler replaces all uses of value with calls to __c.front > throughout the body of the loop". > > Surely, there is something wrong here... right? Yes. :) Ali