A Huge Bummer When Using alias this

Meta via Digitalmars-d digitalmars-d at puremagic.com
Thu Mar 24 16:02:34 PDT 2016


On Thursday, 24 March 2016 at 21:26:00 UTC, Jack Stouffer wrote:
> alias this is only useful when not using any function that 
> relies on the template constraints in std.traits.
>
> For example
>
> import std.traits;
>
> void someFunc(N)(N val) if (isNumeric!N)
> {
>     int b = val;
> }
>
> void main()
> {
>     import std.typecons;
>     Nullable!int a = 42;
>
>     someFunc(a);
> }
>
> $ dmd test.d
> test.d(13): Error: template someFunc cannot deduce function 
> from argument types !()(Nullable!(int))
>
> Removing the template constraint makes it compile and run just 
> fine. What's a good work around for these types of issues?

It has been brought up quite a few times before and if I recall 
Andrei wasn't all that concerned. For what reason I'm not sure, 
as alias this is supposed to introduce a subtype yet it clearly 
isn't because template constraints will fail when they shouldn't. 
Basically there's no workaround aside from defining your own 
isNumeric and forwarding to std.traits.isNumeric.


More information about the Digitalmars-d mailing list