Voldemort toHexString Compile Error
Salih Dincer
salihdb at hotmail.com
Sun Mar 17 13:03:55 UTC 2024
```d
void main()
{
import std.stdio;
"Hello D".toHexString.writeln;
}
struct HexString
{
int i;
auto nibbleSplit()
{
auto MSB = i >> 4;
auto LSB = i & 15;
return [MSB, LSB];
}
}
auto toHexString(string str)
{
struct Hex { int i;
auto nibbleSplit() {
auto MSB = i >> 4;
auto LSB = i & 15;
return [MSB, LSB];
}
}
import std.algorithm : map;
import std.conv, std.range : join;
return str.map!Hex//String
.map!(e => e.nibbleSplit).join
.map!(n => n += n > 9 ? '7' : '0')
.map!(c => c.to!char);
}
```
Why doesn't the function compile? But the code is compiled with
the HexString structure. The error given by the compiler is as
follows:
> /dlang/dmd/linux/bin64/../../src/phobos/std/algorithm/iteration.d(582): Error: cannot access frame pointer of `onlineapp.toHexString.Hex`
/dlang/dmd/linux/bin64/../../src/phobos/std/algorithm/iteration.d(479): Error: template instance `std.algorithm.iteration.MapResult!(Hex, string)` error instantiating
onlineapp.d(33): instantiated from here: `map!string`
onlineapp.d(34): Error: template `onlineapp.toHexString.map!((e)
=> e.nibbleSplit).map` is not callable using argument types
`!()(MapResult!(Hex, string))`
/dlang/dmd/linux/bin64/../../src/phobos/std/algorithm/iteration.d(446): Candidate is: `map(Range)(Range r)`
with `Range = MapResult!(Hex, string)`
must satisfy the following constraint:
` isInputRange!(Unqual!Range)
More information about the Digitalmars-d
mailing list