On 4/25/22 19:37, Salih Dincer wrote:

> a lot of errors 😀

Hm. I can't reproduce any of that. I did two things:

1) Added necessary import directives

2) Moved all expressions into the main() function

I did not change anything else. The program below compiles and works with all these compilers:

- dmd 2.098.1
- dmd 2.099.1
- gdc 11.2.0
- ldc 1.28.1 (based on DMD v2.098.1 and LLVM 13.0.1)

Are you using a very old compiler?

import std.range;
import std.algorithm;
import std.conv;
import std.stdio;

struct Bar {
  string s;

  this(R)(R result) {
    import std.conv : to;
    this.s = result.to!string;
  }

  string toString() {
    return s;
  }
}

void main() {
  auto parts = "abcdefghi".chunks(3);
  auto compiled = parts.map!(a => Bar(a));


  // NOTE: PLEASE IGNORE THE ERROR MESSAGES BELOW.
  //       EVERYTHING COMPILES AND WORKS.


  auto notCompile1 = parts.map!Bar;
  /* Error 1: instantiated from here: `map!(Chunks!string)`*/

  auto notCompile2 = parts.map!(c => c.to!string)
                     .map!Bar;
/* Error 1: /usr/src/dmd/linux/bin64/../../src/phobos/std/algorithm/iteration.d(604)
     : cannot access frame pointer of `source.main.Bar`

Error 2: /usr/src/dmd/linux/bin64/../../src/phobos/std/algorithm/iteration.d(499) : template instance `std.algorithm.iteration.MapResult!(Bar, MapResult!(__lambda4, Chunks!string))` error instantiating

Error 3: instantiated from here: `map!(MapResult!(__lambda4, Chunks!string))`
  */
  auto notCompile3 = parts.array.map!Bar;
/* Error 1: /usr/src/dmd/linux/bin64/../../src/phobos/std/algorithm/iteration.d(604)
     : cannot access frame pointer of `source.main.Bar`

Error 2: /usr/src/dmd/linux/bin64/../../src/phobos/std/algorithm/iteration.d(616)
     : cannot access frame pointer of `source.main.Bar`

Error 3: /usr/src/dmd/linux/bin64/../../src/phobos/std/algorithm/iteration.d(499) : template instance `std.algorithm.iteration.MapResult!(Bar, Take!string[])` error instantiating

     Error 4: instantiated from here: `map!(Take!string
  */
  auto arr = compiled.array; /* [abc, def, ghi]

auto arr2 = str.chunks(3)
.map!(a => Bar(a))
.array;//*/

  arr.writeln(": ", typeof(arr).stringof);
}

Ali

Reply via email to