Given an index structure like this:

struct Index( alias arr ) if ( is( typeof( arr ) t : U[], U ) ) {
    private size_t idx;
    @property pure nothrow size_t get( ) const {
        return idx;
    }
    alias get this;

    invariant( ) {
        assert( idx < arr.length );
    }

    this( size_t value ) {
        idx = value;
    }

    Index opAssign( size_t value ) {
        idx = value;
        return this;
    }
}

would it be possible to do something akin to this:

void foo( T )( T[] arr, Index!arr a ) {
}

void bar( ) {
    int[] a = [1,2,3];
    Index!a idx;
    foo( a, idx ); // ensures idx is a valid index for a
}


Somewhat trivial an application, as this could easily be tested
with an in clause, but imagine that ( arr is Index!(arr).arr )
has to be true.


--
Simen

Reply via email to