Slides from my ACCU Silicon Valley talk

spir denis.spir at gmail.com
Tue Dec 14 01:23:37 PST 2010


On Tue, 14 Dec 2010 00:49:10 -0800
Jonathan M Davis <jmdavisProg at gmx.com> wrote:

> It could definitely serve a purpose if _all_ of the possible template 
> specializations fail. Presumably, you intend _one_ of them to work. But that 
> _does_ mean that you get error messages for a number of different template 
> specializations, and you have to sort through them. It _can_ take a fair bit of 
> effort to figure out why a particular template constraint is failing, and it would 
> definitely be nice if there were more information on _why_ a template constraint 
> fails.

The case is analog to producing a sensible parsing error message in case of a choice:
	P	: P1 | P2 | P3
The only solutions are to ignore the issue or to provide error messages for every Pi. This gives for instance:

unittest{
    auto a = character('a');
    auto b = character('b');
    auto c = character('c');
    auto ch = choice(a, b, c)("ch");
    ch.match("d");
}
==>
******************************************************************
Match Failure: cannot match expected pattern.
   pattern : ch=('a'|'b'|'c')
   index   : 0
   found   : d
Failure reasons for sub-patterns: 
******************************************************************
    ******************************************************************
    Match Failure: cannot match expected pattern.
       pattern : 'a'
       index   : 0
       found   : d
    ******************************************************************
    ******************************************************************
    Match Failure: cannot match expected pattern.
       pattern : 'b'
       index   : 0
       found   : d
    ******************************************************************
    ******************************************************************
    Match Failure: cannot match expected pattern.
       pattern : 'c'
       index   : 0
       found   : d
    ******************************************************************

(Actually, the parsing lib does not yet indent sub-pattern error messages -- I cheated.)
I guess a similar scheme can be used for template error messages (when _all_ versions fail).


Denis
-- -- -- -- -- -- --
vit esse estrany ☣

spir.wikidot.com



More information about the Digitalmars-d mailing list