On Friday, 20 May 2016 at 19:34:11 UTC, Walter Bright wrote:
Constraints can address behavior and relationships, concepts do not.

Wow, TIL. That's so clear once said !
There's been several discussion here and even one phobos PR that proposes a kind of concepts but I didn't realize before that the 2 things are different.

The problem I see in D is that the constraints, since they prevent to output a good message, are doing both (in a way):

void foo(T)(T t)
if (constraint)
{
    // cannot have the message if constraint fails...
    static assert((checkConcept!T).ok, (checkConcept!T).message);
}

At the language level it would work

void foo(T)(T t) @Concept(CheckerTemplate) // use this to output a smart message
if (constraint)
{

}

But really, without changing much what I'd like to see is a DMD feature that would parse and evaluate the constraints to output a message: such as

void foo(T)(T t)
if ((a || b) && (a || b))
{
}

error:(a || b) is false

instead of throwing the whole constraint text in the output.

Reply via email to