digitalmars.D - Why is size_t not a typedef
- Freddy (12/12) Nov 07 2014 Why is size_t an alias and not a typedef(or a struct that is not
- Jonathan Marler (14/26) Nov 07 2014 size_t is meant to have a range large enough to hold any offset
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
Nov 07 2014
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 uintsize_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.
Nov 07 2014