Hello and welcome.

The toString does work the same as it does in Java,  I suggest using override.

override string toString();

Your error actually indicates a bug in Phobos. It has a special print function 
for classes and for an input range. These are conflicting with each other and 
has nothing to do with your toString. Luckily once your container is properly 
created, you won't have this issue. So I will file the bug sometime.

The first thing to note is that you are creating a container[1] and not an 
InputRange[2]. The distinction here is that a Range is consumed, you don't 
iterate over them multiple times. A container on the other hand has different 
access requirements. (Documentation on Containers is a little messed up.)

Generally opApply is not used if you are building a Range, but does have its 
uses and I believe has priority in a foreach statement.

To build on the example from bearophile You would have something like this with 
your selection of Container functions:

import std.stdio: writeln;

class LinkedList(T) {
   override string toString() { return "foo"; }

   struct Range(T) {
      T front() { return T.init; }
      T moveFront() { return T.init; }
      void popFront() {}
      bool empty() { return true; }
   }

   Range!T opSlice() {
      Range!T r;
      return r;
   }
}
void main() {
    LinkedList!(int) list = new LinkedList!int;
    writeln(list);
    //writeln(list.toString());
}


1. http://digitalmars.com/d/2.0/phobos/std_container.html
2. http://digitalmars.com/d/2.0/phobos/std_range.html

Reply via email to