On Thursday, 1 September 2016 at 13:18:18 UTC, Rory McGuire wrote:
void main() {
ctfefunc();
}


string ctfefunc() {
static if (assertCTFE!true) {
throw new Exception("asdf");
}
return `import std.stdio; writeln("ctfe generated this");`;
}

template assertCTFE(bool b) {
enum assertCTFE = __traits(compiles, _checkCTFE());
}
void _checkCTFE() {
import std.uuid;
enum id = new UUID("8AB3060E-2cba-4f23-b74c-b52db3bdfb46");
}

[…] current implementation does not respect __traits(compiles, ....);

As far as I can tell that is a bug. Thoughts?

This doesn't do what you think it does in more than one way. If you laid out how you think it should work, I'd be happy to walk you through where it goes wrong in particular. However, as it is, the whole program would certainly fail to compile if __traits(compiles, …) were false (which it indeed is) because the module-level function _checkCTFE() couldn't then be compiled either. It's just a top-level function. There is no __traits(compiles, ....) involved in that.

 — David

Reply via email to