On Tuesday, 25 September 2012 at 15:41:42 UTC, Mehrdad wrote:
On Tuesday, 25 September 2012 at 13:34:28 UTC, Andrei Alexandrescu wrote:
On 9/25/12 4:23 AM, Mehrdad wrote:
On Tuesday, 25 September 2012 at 08:21:39 UTC, Mehrdad wrote:
without creating new times


new types**

Ah, better now. Still it would be great to explain it more :o).

Andrei

Haha ok. :) I mean like, essentially, these need to work:

assert(is(typeof(foo.stride(1)) == typeof(foo.stride(2).stride(3))));
assert(is(typeof(foo.drop(1)) == typeof(foo.drop(2).drop(3))));
assert(is(typeof(foo.take(1)) == typeof(foo.take(2).take(3))));

I can't comment on the rest of your points, but stride and take DO check for type recursivity, and drop always returns the same type as input anyways. Failure of ANY of these asserts is a bug. What where your inputs?

//-----------------------
import std.range;

struct S
{
  enum empty = false;
  void popFront(){};
  @property int front(){return 1;}
}

void main()
{
  S foo;
static assert(is(typeof(foo.stride(1)) == typeof(foo.stride(2).stride(3)))); static assert(is(typeof(foo.drop(1)) == typeof(foo.drop(2).drop(3))));
  static assert(is(typeof(foo) == typeof(foo.drop(2)))); //Or this
static assert(is(typeof(foo.take(1)) == typeof(foo.take(2).take(3))));
}
//-----------------------

Reply via email to