On Friday, 14 February 2020 at 21:33:01 UTC, aliak wrote:
Hi,
[...]
Cheers,
- ali
Ok, you can now model an actual input range with most of it's
caveats:
interface InputRange(T) {
@property bool empty();
@property T front();
@ignoreAttributes void popFront();
}
struct MyRange {
mixin Models!(InputRange!int);
}
source/bolts/experimental/signatures.d(341,5): Error: static
assert: "Type MyRange does not comply to signature
InputRange!(int)
Missing identifier empty of type bool.
Missing identifier front of type int.
Missing identifier popFront of function type void().
source/bolts/experimental/signatures.d(8): <-- Signature
InputRange!(int) defined here.
source/bolts/experimental/signatures.d(15): <-- Checked here."
To fix the errors you'd need a name called empty that returns a
bool (i.e. is a member variable or a property function). Same
with front. And for popFront it can be a function with whichever
attributes attached to it.
Not sure what to do with a range model that has "ref T front".
Maybe an @ignoreRefness attribute?
Cheers