Status status = __traits(compilesReportError, {string b=10; }) => status.msg=Error: cannot....

Atila Neves atila.neves at gmail.com
Thu Feb 8 09:48:31 UTC 2018


On Wednesday, 7 February 2018 at 20:29:44 UTC, Timothee Cour 
wrote:
> is there any way to get error from speculative execution 
> (`__traits(
> compiles, ...)`)? would be useful in tests; If not currently 
> how hard
> would that be to implement? eg:
>
> ```
>
> struct Status{bool ok; string msg;}
>
> Status status = __traits(compilesReportError, {string b=10;})
> assert(!status.ok);
> assert(status.msg==`main.d(15) Error: cannot implicitly convert
> expression 10 of type int to string`);
> ```

static if(!__traits(compiles, $CODE)) {
     $CODE
}

It's the same technique I use in concepts to produce an error 
message if a struct you wanted to be, say isInputRange, isn't:

https://github.com/atilaneves/concepts

Atila


More information about the Digitalmars-d mailing list