version(bool) { alias byte BOOL; const int BOOLBITS = 1; } else version(wbool) { alias byte BOOL; const int BOOLBITS = 8; } else version(dbool) { alias int BOOL; const int BOOLBITS = 32; } else static assert(0); void main() { BOOL b; BOOL[32] ba; BOOL* bp; bp = &b; debug printf("bp %X\n&b %X\ndiff %d\n", cast(void*) bp, cast(void*) &b, cast(void*) bp - cast(void*) &b); assert(cast(void*) bp == cast(void*) &b); bp = ba; debug printf("bp %X\nba %X\ndiff %d\n", cast(void*) bp, cast(void*) ba.ptr, cast(void*) bp - cast(void*) ba.ptr); assert(cast(void*) bp == cast(void*) ba.ptr); bp = ba; bp += 4; assert(cast(void*) bp == (cast(void*) ba.ptr) + (4*BOOLBITS)/8); bp = ba; bp += 8; debug printf("bp %X\nba %X\ndiff %d\n", cast(void*) bp, cast(void*) ba.ptr, cast(void*) bp - cast(void*) ba.ptr); assert(cast(void*) bp == (cast(void*) ba.ptr) + (8*BOOLBITS)/8); bp = &ba[0]; debug printf("bp %X\nba %X\ndiff %d\n", cast(void*) bp, cast(void*) ba.ptr, cast(void*) bp - cast(void*) ba.ptr); assert(cast(void*) bp == cast(void*) ba.ptr); bp = &ba[4]; assert(cast(void*) bp == (cast(void*) ba.ptr) + (4*BOOLBITS)/8); bp = &ba[8]; debug printf("bp %X\nba %X\ndiff %d\n", cast(void*) bp, cast(void*) ba.ptr, cast(void*) bp - cast(void*) ba.ptr); assert(cast(void*) bp == (cast(void*) ba.ptr) + (8*BOOLBITS)/8); }