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