Comparing template alias parameters

Simen kjaeraas simen.kjaras at gmail.com
Fri Dec 10 05:20:50 PST 2010


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


More information about the Digitalmars-d-learn mailing list