On 1/2/22 4:15 AM, eugene wrote:
On Sunday, 2 January 2022 at 08:39:57 UTC, eugene wrote:
```d
import std.stdio;
import std.string;
```
oops...
```d
import std.stdio;
import std.string;
import std.algorithm : until;
void main() {
ubyte[8] b = [0x68, 0x65, 0x6C, 0x6C, 0x6F, 0x0A, 0x00, 0x00];
/* "hello\n\0\0" */
writefln("'%s, world'", cast(char[])b[].until('\n'));
}
```
```
p1.d(9): Error: cannot cast expression `until(b[], '\x0a', Flag.yes)` of
type `Until!("a == b", ubyte[], char)` to `char[]`
```
Thanks for posting the entire example, that always helps to diagnose
unexpected errors.
You missed a set of parentheses. `cast` is quite low for operator
precedence.
What is happening in your code is:
`b[].until('\n')` is being evaluated *first*, which returns an
`Until!...` struct, which then cannot be cast into char[].
But if you run my code, I do `(cast(char[])b[]).until('\n')`, which
*first* casts the ubyte array into a char array, and *then* runs `until`
on it.
-Steve