ElementType!(Range) problem

Philippe Sigaud philippe.sigaud at gmail.com
Tue Apr 5 12:13:33 PDT 2011


>
> I get a "untitled.d(32): Error: template instance ElementType!(listR) does not
> match template declaration ElementType(R)" error.
>
> What could be the problem ?
> --------------------------------------------------------------------------
>
> import std.stdio;
> import std.range;
> import std.container;
>
> int main(char[][] args)
> {
>        auto list=SList!(int)(1,2,3);
>        auto listR=list.opSlice();
>        writefln("%s",ElementType!(listR));
>
>
>        return 0;
> }
> --------------------------------------------------------------

ElementType acts on types. It takes a type and 'returns' (compiles to,
actually) another type. You need to give it typeof(listR).
Then, as ElementType!(typeof(listR)) is a type, you cannot pass it to
writeln. Use .stringof to go from the type to a string representation
of its name.

So:

writefln("%s", ElementType!(typeof(listR)).stringof);

ElementType!(typeof(listR)) is a type like any other. You can create a
variable with it:

ElementType!(typeof(listR)) elem;

Btw, .opSlice() is the name of the '[]' operator. You previous line
can be written like this:

auto listR = list[];


    Philippe


More information about the Digitalmars-d-learn mailing list