Choosing arity of a template function

Timon Gehr via Digitalmars-d digitalmars-d at puremagic.com
Sat Feb 27 12:28:03 PST 2016


On 27.02.2016 01:03, Jonathan M Davis wrote:
>
> There's nothing cheating about using __traits(compiles). It's basically
> the same as using is(typeof(foo)) and is(typeof({statement;})), albeit
> arguably a bit more explicit about the fact that it's testing what compiles.

The two are subtly different and only __traits(compiles,...) reliably 
checks for compilability. Never use is(typeof(...)) unless you know 
exactly what you are doing.

void main(){
     int x;
     static void foo(){
         static assert(is(typeof({return x;})));
         static assert(!__traits(compiles,{return x;}));
         //auto a={return x;}; // error
     }
}



More information about the Digitalmars-d mailing list