On Friday, 7 November 2014 at 21:05:52 UTC, Freddy wrote:
Why is size_t an alias and not a typedef(or a struct that is not
implictly convertable)

----test.d
void main(){
     ulong a;
     size_t b=a;//only compiles on 64-bit
}
----
$ dmd -m64 test

$ dmd -m32 test
test.d(3): Error: cannot implicitly convert expression (a) of
type ulong to uint

size_t is meant to have a range large enough to hold any offset to any pointer on your platform. On 32 bit this is a 32 bit unsigned integer (uint) and on 64 bit it is a 64 bit unsigned integer (ulong). So on 32 bit size_t is the same as uint and on 64 bit it is the same as ulong. So it makes sense that this doesn't compile on 64 bit systems.

I could see you making an argument that a ulong should never be implicitly converted to a size_t because that could produce different results depending on the platform, but I don't think that if size_t is 32 bits that ulong should ever be implicitly converted to a size_t. If you want to do something like that you better know what your doing and requiring an explicit cast is a reasonable way to protect against unsafe casts.

Reply via email to