Thread overview
Status status = __traits(compilesReportError, {string b=10;}) => status.msg=Error: cannot....
Feb 07, 2018
Timothee Cour
Feb 07, 2018
Nicholas Wilson
Feb 07, 2018
Timothee Cour
Feb 08, 2018
Atila Neves
February 07, 2018
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`);
```
February 07, 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`);
> ```

Probably not very hard. Would make for some nice diagnostics,but very flakey tests. Compiler errors are frequently changed.
February 07, 2018
understood, but that's responsibility of tester to make sure they're
not too flaky (eg using msg.canFind("FOO") (or, if regex weren't slow,
regex)



On Wed, Feb 7, 2018 at 1:13 PM, Nicholas Wilson via Digitalmars-d <digitalmars-d@puremagic.com> wrote:
> 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`);
>> ```
>
>
> Probably not very hard. Would make for some nice diagnostics,but very flakey tests. Compiler errors are frequently changed.
February 08, 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