Final by default?
Rainer Schuetze
r.sagitario at gmx.de
Tue Mar 18 00:16:23 PDT 2014
On 18.03.2014 02:15, Marco Leise wrote:
> Am Mon, 17 Mar 2014 20:10:31 +0100
> schrieb Rainer Schuetze <r.sagitario at gmx.de>:
>
>>> In that specific case, why does this not work for you?:
>>>
>>> nothrow extern(Windows) {
>>> HANDLE GetCurrentProcess();
>>> }
>>>
>>
>> The attributes sometimes need to be selected conditionally, e.g. when
>> building a library for static or dynamic linkage (at least on windows
>> where not everything is exported by default). Right now, you don't have
>> an alternative to code duplication or heavy use of string mixins.
>
> Can we write this? It just came to my mind:
>
> enum attribs = "nothrow extern(C):";
>
> {
> mixin(attribs);
> HANDLE GetCurrentProcess();
> }
>
Interesting idea, though it doesn't seem to work:
enum attribs = "nothrow extern(C):";
extern(D) { // some dummy attribute to make it parsable
mixin(attribs);
int GetCurrentProcess();
}
int main() nothrow // Error: function 'D main' is nothrow yet may throw
{
return GetCurrentProcess(); // Error: 'attr.GetCurrentProcess' is not
nothrow
}
I guess this is by design, the mixin introduces declarations after the
parser has already attached attributes to the non-mixin declarations.
More information about the Digitalmars-d
mailing list