__has_side_effects

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Sat Mar 31 20:44:13 UTC 2018


On 3/31/18 4:01 PM, Simen Kjærås wrote:
> On Saturday, 31 March 2018 at 19:18:24 UTC, Shachar Shemesh wrote:
>> struct S {
>>   int a;
>>
>>   void func(int b) pure {
>>     // For some strange reason, this is not considered a pure violation.
>>     a+=b;
>>   }
>> }
> 
> It's the exact equivalent of this code:
> 
> void func(ref S s, int b) pure {
>      S.a += b;
> }
> 
> And that code is perfectly pure accordion to D rules - it does not 
> modify any data not reachable through its arguments.

Yah, only strongly pure functions would qualify. Indeed that's easy for 
the compiler to figure - so I'm thinking pragma(isStronglyPure, 
expression) would be easy to define.

What would be some good uses of this?


Andrei


More information about the Digitalmars-d mailing list