Template specialisation for range of types

data pulverizer via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Mar 12 12:55:56 PDT 2017


On Sunday, 12 March 2017 at 19:32:37 UTC, ketmar wrote:
> data pulverizer wrote:
>
>> In this case would like to use the ConstOf specialisation 
>> instead of the default implementation for the inputs which are 
>> const.
>
> actually, second template is uninstantiable at all. you want to 
> do type deconstruction at instantiation, and that doesn't work.
>
> i.e. what your code wants to do (as it is written) is to have 
> `T` in second template to be equal to `double`. you cannot 
> deconstruct the type like that in template. what you *can* do, 
> though, is this:
>
>  auto max(T)(const(T)* x, const(T)* y)
>
> this way it will select your second template.

If I change the implementation of the second template to your 
above declaration, I get the error:

max.max called with argument types (const(double)*, 
const(double)*) matches both:
max.d(34):     max.max!(const(double)*).max(const(double)* x, 
const(double)* y)
and:
max.d(42):     max.max!double.max(const(double)* x, 
const(double)* y)

I need at least those two implementation for the different cases, 
a general "default", and for specified types and type 
qualifications.



More information about the Digitalmars-d-learn mailing list