I wish all qualifiers were revisited with an eye for simplification

Timon Gehr timon.gehr at gmx.ch
Sat Aug 15 01:35:32 UTC 2020


On 15.08.20 03:29, Timon Gehr wrote:
> 
>> Simple questions should have simple answers.
> 
> If the above implementation of isCopyable is not the one you want, 
> something else is off.

Oh, actually I misspoke, didn't notice that you changed my suggestion 
from the github issue from __traits(compiles, ...) to is(typeof(...)).

Use __traits(compiles, ...), not is(typeof(...)). typeof assigns types 
to expressions that would not otherwise compile, even lambdas:

void main(){
     int x;
     static void foo(){
         pragma(msg, typeof(()=>x));             // int delegate() pure 
nothrow @nogc @safe
         pragma(msg, __traits(compiles, ()=>x)); // false
     }
}

There is this persistent myth that __traits(compiles, ...) is the same 
as is(typeof(...)) this is not the case and IIRC I have used it to 
demonstrate that most template constraints in Phobos don't work correctly.


More information about the Digitalmars-d mailing list