KeyType, ValueType traits for hashes
Mantis
mail.mantis.88 at gmail.com
Tue Jan 24 12:18:29 PST 2012
24.01.2012 20:49, bearophile пишет:
> Mantis:
>
>> Of course, most likely that user already did type check, but if not,
>> this will give less cryptic error:
>>
>> Error: static assert "Not associative array: int"
>> instantiated from here: KeyType!(int)
>>
>> , instead of:
>>
>> Error: template instance KeyType!(int) KeyType!(int) does not match
>> template declaration KeyType(AA) if (isAssociativeArray!(AA))
> It's a tradeoff. Your custom error message is more readable, but the failure at the template constraint causes a error line at the instantiation point. Sadly I think there is no solution that solves both problems (we have stack traces for templates, but...).
>
> Bye,
> bearophile
>
True. Maybe something is possible to achieve in this direction?:
template verboseFail(alias Cond, string message)
{
static if (Cond)
{
enum verboseFail = true;
}
else
{
pragma( msg, message );
enum verboseFail = false;
}
}
template KeyType(AA)
if (verboseFail!(isAssociativeArray!AA, "Not assosiative array: " ~
AA.stringof))
{
static if (is(AA V : V[K], K))
{
alias K KeyType;
}
}
It doesn't work very nicely (the message is logged, but dos not look as
it is related to error), but perharps it may be improved somehow?
More information about the Digitalmars-d-learn
mailing list