Should this work?
Jacob Carlborg
doob at me.com
Fri Jan 10 00:23:55 PST 2014
On 2014-01-09 21:27, H. S. Teoh wrote:
> Yeah, that error drives me up the wall too. I often get screenfuls of
> errors, dumping 25 or so overloads of some obscure Phobos internal
> function (like toImpl) as though an end-user would understand any of it.
> You have to parse all the sig constraints (and boy some of them are
> obscure), *understand* what they mean (which requires understanding how
> Phobos works internally), and *then* try to figure out, by elimination,
> which is the one that you intended to match, and why your code failed to
> match it.
>
> I'm almost tempted to say that using sig constraints to differentiate
> between template overloads is a bad idea. Instead, consider this
> alternative implementation of toImpl:
>
> template toImpl(S,T)
> // N.B.: no sig constraints here
> {
> static if (... /* sig constraint conditions for overload #1 */)
> {
> S toImpl(T t)
> {
> // implementation here
> }
> }
> else static if (... /* sig constraint conditions for overload #2 */)
> {
> S toImpl(T t)
> {
> // implementation here
> }
> }
> ...
> else // N.B.: user-readable error message
> {
> static assert(0, "Unable to convert " ~
> T.stringof ~ " to " ~ S.stringof);
> }
> }
>
> By putting all overloads inside a single template, we can give a useful
> default message when no overloads match.
If I recall correctly, Andrei has mentioned that something like the
above doesn't works so well with __tratis(compile).
--
/Jacob Carlborg
More information about the Digitalmars-d
mailing list