On Monday, 8 July 2013 at 18:55:30 UTC, Artur Skawina wrote:
On 07/08/13 19:54, monarch_dodra wrote:
struct S(R)
{
    R _input;
    void foo()
    {
static assert(is(typeof(_input[size_t.max .. size_t.max]))); //ok static assert(is(typeof(_input[size_t.max .. $]))); //ok
    }
static assert(is(typeof(_input[size_t.max .. size_t.max]))); //ok
    static assert(is(typeof(_input[size_t.max .. $]))); //NOPE!
}

As you can see, the static if behaves differently in a function, or in the raw body of the struct. Is this normal? Anybody know what is going on exactly? I'm trying to get more context here...

-----------------------------------------------

Second, one of the things I found strange was that only *1* of the two assertions failed. basically, _input[0 .. 1] is fair game, yet, _input[0 .. $] is not? What gives? I put my nose in cycles's opDollar. It is written like this:

Did you really mean size_t.*max* above?

Yeah. It's not a runtime test. In this case, I *also* need to make sure that the slie operation accepts a size_t arg. If I use size_t.min, it statically evaluates to zero, so the test becomes sens-less: saying "fun(size_t.min)" works doesn't actually guarantee you can pass a size_t: it may actually only accepts ubytes or short indexing.

But I guess that is a detail in the scope of the original problem.

Anyway, when '$' is rewritten as 'opDollar' and that is defined
as a non-static method, it would be surprising if calling the
method did work w/o any context pointer...

But, the "context pointer" *should* be defined as whatever the owner of the indexing/slicing object is, no? In this case, it's simply _input. It has nothing to do with the "this" pointer being available...

If anything, it kind of worries me about *what* the implementation is doing with the this pointer, but I haven't been able to "trick" it into calling a wrong function.

Does declaring the opDollar "function" as `static` fix it?

artur

Yes. It does fix it. I think you put your finger exactly on where the issue is. I'll report it in the morning. Thank you for participating :)

Reply via email to