On Tuesday, 12 March 2013 at 15:37:01 UTC, deadalnix wrote:
On Tuesday, 12 March 2013 at 15:26:19 UTC, TommiT wrote:
With the thing defined that way not that much. But consider :
concept InputRange(T) {
bool empty;
T front;
void popFront();
}
What if I write a type like the following:
struct MyType {
int _value;
@property bool empty() const { return true; }
@property ref const(int) front() const { return _value; }
void popFront() const { }
}
Does MyType fulfill the requirements of your InputRange(T)
concept? I don't think it does since its front returns by ref
const(int) and InputRange(T)'s front returns by value.
It doesn't because popFront is const and that don't make any
sense.
I didn't mean to make popFront const. My point was that
InputRange concept requires that the front property returns a
non-void type but it doesn't care whether or not it is returned
by ref, const ref, or by value. I don't see how you could easily
convey that kind of requirement in an interface-like syntax.