Forcing weak-pure

Steven Schveighoffer schveiguy at yahoo.com
Tue Mar 25 07:18:26 PDT 2014


On Tue, 25 Mar 2014 10:08:20 -0400, monarch_dodra <monarchdodra at gmail.com>  
wrote:

> On Tuesday, 25 March 2014 at 13:30:04 UTC, Steven Schveighoffer wrote:
>> How can we force these to be weak-pure? One option suggested is to add  
>> a hidden void * parameter that defaults to null, to force the issue.  
>> But I think future compilers may be smart enough to realize that can  
>> also be a strong-pure call.
>
> Maybe instead of using null, we could use global junk?
>
> //Global junk
> struct WeakPure{int a;}
> __gshared WeakPure dummyWeakPure;
>
>
> //Signature
> void weakPureFun(WeakPure* p = &dummyWeakPure)
> {}
>
>
> //Useage
> weakPureFun();
>
>
>
> AFAIK, the compiler should NOT be able to infer strong purity here. I  
> don't know about performance effects though.

I think again, a sufficiently intelligent compiler could see that  
dummyWeakPure would not be used in the template, we likely would have to  
pass it to the underlying opaque function. I'd really like to avoid this  
option, if it's not going to be optimized down to the minimal case.

-Steve


More information about the Digitalmars-d mailing list