Showing a user specified error message when no overloads match

via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Jul 27 01:40:41 PDT 2014


On Sunday, 27 July 2014 at 00:43:40 UTC, H. S. Teoh via 
Digitalmars-d-learn wrote:
> On Sat, Jul 26, 2014 at 05:14:44PM +0000, via 
> Digitalmars-d-learn wrote:
>> Hmmm... thinking about it, is this possible?
>> 
>> 1. Remove the constraints to match anything.
>> 2. Inside the template, have some construct that enumerates 
>> all possible
>> overloads and UFCS functions that are visible at the point of 
>> instantiation.
>> 3. If this set contains only the current template, use a 
>> static assert
>> to print the message.
>> 4. Otherwise, make the template fail to compile somehow (for 
>> example,
>> evaluate a semantically invalid expression), and hope that the
>> compiler will then take the other overloads into consideration
>> (SFINAE).
>> 
>> Could this work?
>
> D does not have SFINAE.

http://dlang.org/templates-revisited.html says otherwise.

But thinking about it, I've never seen it used anywhere, nor used 
it myself, and even the examples in the linked article under the 
SFINAE section use `is` expressions instead...

>
> This has been discussed before. I proposed the following 
> solution:
>
> - Sig constraints should match all types that the function 
> *logically*
>   accepts -- even if the current implementation does not 
> support some of
>   said types.
>
> - In the function body, use a `static if` chain to implement
>   specializations.
>
> - In the final else clause, do a static assert(0) with a 
> user-friendly
>   error message.

But this prevents other people from providing overloads in their 
own modules :-(


More information about the Digitalmars-d-learn mailing list