DRY version of `static if(__traits(compiles, expr)) fun(expr)`
Ali Çehreli via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed Dec 14 14:06:35 PST 2016
On 12/14/2016 09:25 AM, Basile B. wrote:
> On Tuesday, 13 December 2016 at 23:37:59 UTC, Timon Gehr wrote:
>> I usually do
>>
>> enum code = q{expr};
>> static if(__traits(compiles,mixin(code)))
>> fun(mixin(code));
>
> Strangely if i put this in a templated enum that doesn't work.
> If instead i use a delegate literal it works.
>
> enum Compiles(string code) = is(typeof((){mixin(code);}));
>
> enum Compiles2(string code) = __traits(compiles, mixin(code));
When you do that, the code does not match the syntax of
__traits(compiles). Putting the code inside a scope works at least in
this case:
enum Compiles2(string code) = __traits(compiles, mixin('{' ~ code ~ '}'));
Ali
More information about the Digitalmars-d-learn
mailing list