compilation fails for no reason in given example involving a template using mixin, static if and __traits(compiles, ...) code reflection. see details in example as it is too complicated to describe.
might be related to issue 12532. however, example fails as well when 'enum' is replaced by 'const'
=== EXAMPLE ===
template valid(string mem){
pragma(msg, "instantiation of valid with: "~mem);
static if( !__traits( compiles, mixin(mem) ) ){
enum valid = false;
}else{
enum valid = true;
}
}
enum works = valid!"fails";
pragma(msg, "found 'fails' (via 'works')? "~works.stringof );
// compiles but produces 'false': issue 12532
enum dummy = valid!"fails";
pragma(msg, "found 'fails' (via 'dummy')? "~dummy.stringof );
// compiles but produces 'false': issue 12532
enum fails = valid!"fails";
// Error: variable demo.fails had semantic errors when compiling
// NOTE: if you comment out the first two usages of valid!"fails",
// it will work here - but give 'false' again.
// pragma(msg, "found 'fails' (via 'fails')? "~fails.stringof );
void main(){}
Comment #1 by 2krnk — 2014-04-07T22:50:35Z
(In reply to comment #0)
might be caused by issue 12541.
Comment #2 by robert.schadek — 2024-12-13T18:19:35Z