why is this cast necessary?

Graham Fawcett fawcett at uwindsor.ca
Mon Jun 7 20:02:48 PDT 2010


Hi folks,

This program works as expected in D2:

    import std.stdio;
    import std.algorithm;

    T largestSubelement(T)(T[][] lol) {
      alias reduce!"a>b?a:b" max;
      return cast(T) max(map!max(lol));   // the cast matters...
    }

    void main() {
      auto a = [[1,2,3],[4,5,6],[8,9,7]];
      assert (largestSubelement(a) == 9);

      auto b = ["howdy", "pardner"];
      assert (largestSubelement(b) == 'y');

      auto c = [[1u, 3u, 45u, 2u], [29u, 1u]];
      assert (largestSubelement(c) == 45u);
    }

But if I leave out the 'cast(T)' in line 7, then this program will not
compile:

lse.d(6): Error: cannot implicitly convert expression
		  (reduce(map(lol))) of type dchar to immutable(char)
lse.d(14): Error: template instance
		   lse.largestSubelement!(immutable(char)) error 
instantiating

Where did the 'dchar' came from? And why does the cast resolve the issue?

Best,
Graham



More information about the Digitalmars-d-learn mailing list