auto & class members

Ali Çehreli acehreli at
Mon May 21 18:13:16 UTC 2018

On 05/20/2018 10:46 AM, Robert M. Münch wrote:

 > But I still don't understand why I can't write things explicitly but
 > have to use an alias for this.

Templatized range types work well when they are used as template 
arguments themselves.

When you need to keep a single type like 'b' (i.e. b is not a template), 
and when you need to set a variable like mySubStream to a dynamic 
object, the solution is to use inputObject():

import std.algorithm;
import std.range;

class a {
     int[] myStream = [ 1, 2, 42, 100 ];

int myMessage = 42;

class b {
     InputRange!int mySubStream;

void myFunc() {
     a myA = new a();
     b myB = new b();

     myB.mySubStream = inputRangeObject(myA.myStream.filter!(x => x == 


void main() {

Now, mySubStream is a range variable that satisfies the input range 
interface and produces int elements. (Adjust accordingly.) You can use a 
more specialized range kind other than InputRange if the actual range 
supports it (e.g. ForwardRange!int, etc.):


More information about the Digitalmars-d-learn mailing list