Walter Bright wrote:
On 6/11/2017 8:25 AM, Andrei Alexandrescu wrote:
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.
There was a proposal a while back to enable CTFE to print messages, which
is probably a better solution. msg() could be something along the lines
of:
bool msg(string) { __ctfeprint(string); return true; }
which would involve considerably less compiler magic. Furthermore, `msg`
could be a local private function, which would avoid "but I'm already
using `msg`" problems.
i think, that something like `__constraint(condition, "message")` is ok,
and it should be built-in, just like `__traits()`. so compiler can collect
those messages, and only show 'em if the matcher is failed to find
anything. yeah, another hack in interpreter, but fairly small, and should
solve "what constraint is really failed" problem.