data pulverizer wrote:

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.

'cause your templates are for different types, so they both matches. i wrote only about type deconstruction. the following will work:

 import std.stdio : writeln;
 import std.traits : Unqual;

 auto max(T)(T* x, T* y) if (is(T == Unqual!T)) {
   writeln("General template");
   return *x > *y ? x : y;
 }

 auto max(T)(T* x, T* y) if (is(T == const)) {
   writeln("Const template");
   return *x > *y ? x : y;
 }


 void main () {
   const double p = 2.4, q = 3;
   writeln(max(&p, &q));
 }

note the change in the first template.

Reply via email to