Thread overview | ||||||
---|---|---|---|---|---|---|
|
February 07, 2018 Status status = __traits(compilesReportError, {string b=10;}) => status.msg=Error: cannot.... | ||||
---|---|---|---|---|
| ||||
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 Re: Status status = __traits(compilesReportError, {string b=10;}) => status.msg=Error: cannot.... | ||||
---|---|---|---|---|
| ||||
Posted in reply to Timothee Cour | 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 Re: Status status = __traits(compilesReportError, {string b=10; }) => status.msg=Error: cannot.... | ||||
---|---|---|---|---|
| ||||
Posted in reply to Nicholas Wilson | 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 Re: Status status = __traits(compilesReportError, {string b=10;}) => status.msg=Error: cannot.... | ||||
---|---|---|---|---|
| ||||
Posted in reply to Timothee Cour | 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 |
Copyright © 1999-2021 by the D Language Foundation