> foreach(ref e; range) > { > } On idea is to have `ref` foreach to say that you would like to iterate your range without copying. The syntax could be: foreach(e; ref range) { } or: ref foreach(e; range) { } At least it will not break existing code. But this means that in each case you should make a decision about `ref`/non ref.