Re:Checked C
by gavinray on Wednesday December 21, 2022 @03:06PM
(#34085713)
You might show an example of how to use D's templates (if it's possible) to emulate the more complex example of computing the bounds from an input argument
[ Parent
| on HN ]
Re:Checked C
by WalterBright on Wednesday December 21, 2022 @03:17PM
(#34085848)
I meant something more like this (although this doesn't QUITE compile, but it's close I think):
static ubyte* [n*2] requires_ptr_twice_as_large_as_input(n : uint)
(
ubyte*[n] input,
ubyte*[n*2] output,
) {
output[0..n] = input[0..n];
output[n..2*n] = input[0..n];
return output;
}
void main()
{
ubyte[10] input = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
ubyte[20] output = new ubyte[20];
requires_ptr_twice_as_large_as_input!(10)(&input, &output);
}This compiles:
ref ubyte[n*2] requires_ptr_twice_as_large_as_input(uint n)
(
const ref ubyte[n] input,
ref ubyte[n*2] output,
) {
output[0..n] = input[0..n];
output[n..2*n] = input[0..n];
return output;
}
void main()
{
ubyte[10] input = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
ubyte[20] output;
requires_ptr_twice_as_large_as_input!(10)(input, output);
import std.stdio;
writeln(output);
assert(output == input ~ input);
}