Type-Strict Indexes: IndexedBy
"Nordlöw" via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Mon Feb 16 12:09:06 PST 2015
I'm trying to figure out how to implement a light-weight wrappr
realizing type-safe indexing á lá Ada. Here's my first try:
struct Ix(T = size_t)
{
@safe pure: @nogc nothrow:
this(T ix) { this._ix = ix; }
alias _ix this;
private T _ix = 0;
}
struct IndexedBy(R, I)
{
auto ref opIndex(I ix) inout { return _r[ix]; }
auto ref opSlice(I lower, I upper) inout { return _r[lower ..
upper]; }
R _r;
alias _r this;
}
auto indexedBy(I, R)(R range)
{
return IndexedBy!(R, I)(range);
}
unittest
{
import std.stdio;
auto x = [1, 2, 3];
alias I = int;
auto ix = x.indexedBy!I;
ix[0] = 11;
alias J = Ix!size_t;
auto jx = x.indexedBy!J;
jx[J(0)] = 11; // should compile
jx[0] = 11; // TODO how can I make this not
compile?
}
My question now of course is:
How can I prevent
jx[0] = 11;
from compiling?
More information about the Digitalmars-d-learn
mailing list