On 13/01/12 10:01, k2 wrote: > When replace typedef to enum, it became impossible to compile a certain > portion. > > dmd v2.057 Windows > -------------------------------------------- > enum HANDLE : void* {init = (void*).init} > > pure HANDLE int_to_HANDLE(int x) > { > return cast(HANDLE)x; > } > > void bar() > { > HANDLE a = cast(HANDLE)1;// ok > HANDLE b = int_to_HANDLE(2);// ok > } > > HANDLE c = cast(HANDLE)3;// ok > HANDLE d = int_to_HANDLE(4);// NG > -------------------------------------------- > foo.d(17): Error: cannot implicitly convert expression (cast(void*)4u) > of type void* to HANDLE
It's a problem. Casting integers to pointers is a very unsafe operation, and is disallowed in CTFE. There is a special hack, specifically for Windows HANDLES, which allows you to cast integers to pointers at compile time, but only after they've left CTFE.