__has_side_effects
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Sun Apr 1 10:23:40 UTC 2018
On 4/1/18 2:22 AM, Uknown wrote:
> On Sunday, 1 April 2018 at 05:27:38 UTC, Uknown wrote:
>> [...]
>>
>> I knew I was missing something. Fixed it, thanks
>>
>> https://run.dlang.io/is/tZeZrP
>
> Sorry for the spam, but I also managed to miss `immutable`, `const` and
> when T has mutable indirections
>
> Final version that I'm sure covers all the cases:
>
> https://run.dlang.io/is/kGoU4X
That's a great initiative, and a worthy trait for the stdlib. I think
you'd have an easier time if you reasoned from the other end. A function
is strongly pure if all of the following are true:
* Each parameter:
- is immutable, OR
- can be converted automatically to immutable (i.e. has no mutable
indirections) AND is passed by value
* The return type:
- is immutable, OR
- can be converted automatically to immutable
(We don't want to give const this much power yet for other reasons.)
The template should support taking the function name as a string, too,
and the parameter types so as to easily distinguish across overloads.
This would be a great addition to std.traits. Once we have it, we'll
have a precise unified definition of strongly pure across the language
spec and the stdlib definition. Please follow up, thanks!
Andrei
More information about the Digitalmars-d
mailing list