Expressing range constraints in CNF form
Stefan Koch via Digitalmars-d
digitalmars-d at puremagic.com
Sun Jun 11 09:15:36 PDT 2017
On Sunday, 11 June 2017 at 15:25:11 UTC, Andrei Alexandrescu
wrote:
> On 6/11/17 11:11 AM, Nick Treleaven wrote:
>> On Sunday, 11 June 2017 at 00:28:58 UTC, Andrei Alexandrescu
>> wrote:
>>> https://github.com/dlang/phobos/pull/5461
>>>
>>> There's many good advantages to this. The immediate one is
>>> the constraint is better structured and easier to understand.
>>> Then, the compiler can print the exact clause that failed,
>>> which improves the precision and quality of the error message.
>>
>> Great!
>
> Thanks.
>
>>> // Also possible (no change to the language)
>>> enum bool isInputRange(R) =
>>> is(typeof((ref R r) => r)) && msg("must be copyable")
>>> && is(ReturnType!((R r) => r.empty) == bool) && msg("must
>>> support bool empty")
>>> && is(typeof(lvalueOf!R.front)) && msg("must support
>>> front")
>>> && is(typeof(lvalueOf!R.popFront)) && msg("must support
>>> back");
>>
>> I'm not getting how this works.
>
> Ostensibly the function is trivial:
>
> bool msg(string) { return true; }
>
> It doesn't change the semantics. The compiler would recognize
> it as an intrinsic and would print the message if the clause to
> its left has failed.
>
>
> Andrei
Exposing magic functions which are recognized by name strikes me
as being worse then proper compiler intrinsics.
More information about the Digitalmars-d
mailing list