On Monday, 11 April 2022 at 21:48:56 UTC, Ali Çehreli wrote:
On 4/11/22 08:02, Paul Backus wrote:

> any pointers or references

To add, Salih and I were in an earlier discussion where that concept appeared as "indirections."

Ali

I tried the following and I didn't understand one thing: Why is there no need to use dup when slicing?

```d
struct S(T) {
 T fileName;

  this(T fileName) {
    this.fileName = fileName;
    report();
  }

  ~this() { report(); }

  void report(string func = __FUNCTION__) {
    import std.stdio;
    writefln!"%s\nworking with %s"(func, fileName);
  }
}
alias T1 = const(char)[];
alias T2 = const char[];
alias T3 = const(char[]); // T3 == T2
alias T4 = immutable char[]; // Not compiling!


void main() {
  auto fileName = "foo.txt".dup;
  auto s = S!T1(fileName);
  fileName[0..3] = "bar";
}/* Results:
  *
  *T1:
  *
  source.S!(const(char)[]).S.this
  working with foo.txt.
  source.S!(const(char)[]).S.~this
  working with bar.txt.
  *
  *T2:
  *
  source.S!(const(char[])).S.this
  working with foo.txt
  source.S!(const(char[])).S.~this
  working with bar.txt
  *
  *T3:
  *
  source.S!(const(char[])).S.this
  working with foo.txt
  source.S!(const(char[])).S.~this
  working with bar.txt
  *
  *T4
  *
  Error: slice `fileName[0..3]` is not mutable
  */
```

SDB@79

Reply via email to