[dmd-beta] Time for a new beta?
Rainer Schuetze
r.sagitario at gmx.de
Mon Aug 22 23:47:49 PDT 2011
On 23.08.2011 00:21, Don Clugston wrote:
> On 20 August 2011 10:39, Rainer Schuetze<r.sagitario at gmx.de> wrote:
>> Hi,
>>
>> I recently updated to the latest revision from github and tried to compile
>> my main project visuald with it. Here are some complications that have hit
>> me:
>>
>> 1. My Windows SDK conversion tool converts C macros to templates, e.g.
>>
>> #define MAKEINTRESOURCEW(i) ((LPWSTR)((ULONG_PTR)((WORD)(i))))
>>
>> is converted to
>>
>> auto MAKEINTRESOURCEW(ARG)(ARG i)() { return ( cast(LPWSTR)(
>> cast(ULONG_PTR)( cast(WORD)(i)))); }
>>
>> This no longer works for CTFE, because casts to pointers are no longer
>> allowed. Making the argument a template parameter still works, though:
>>
>> auto MAKEINTRESOURCEW(int i)() { return ( cast(LPWSTR)( cast(ULONG_PTR)(
>> cast(WORD)(i)))); }
>>
>> Also, casting to a pointer is still allowed when initializing a global
>> variable at compile time.
>>
>> Is this by design or a regression?
> It was by design. The casting to pointer when initializing globals is
> precisely because of these Windows casts.
> Previously, the MAKEINTRESOURCEW function seemed to work but didn't do
> what you'd expect. In many cases, instead of a constant, you were
> getting a runtime function call to the MAKEINTRESOURCEW function...
> But I've just created a pull request
> (https://github.com/D-Programming-Language/dmd/pull/326) which (among
> other things) will allow your function to work in CTFE.
>
Thanks for the quick fix, that brought it back to life.
MAKEINTRESOURCE is used at compile time in the windows headers, e.g.
const RT_CURSOR = MAKEINTRESOURCE(1);
while I've been using it at runtime in my code, so it's good I don't
have to make two different versions of the function.
(Thanks also to Walter for merging it in so fast, I was already
wondering how I could get that pull request into my local repo).
More information about the dmd-beta
mailing list