https://issues.dlang.org/show_bug.cgi?id=14420
Kenji Hara <k.hara...@gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution|--- |INVALID --- Comment #2 from Kenji Hara <k.hara...@gmail.com> --- (In reply to Martin Nowak from comment #0) > void foo(string op:"+", T)(ref T val, T mod) > > void foo(string op, T, V1)(ref T val, V1 mod) > --- "Partial specialization order" is defined only when two templates have same template parameters except for TemplateTypeParameterSpecialization. For example: template A(string op, T) {} // A1 template A(string op:"+", T) {} // A2 is a specialized version of A1 But in the OP code, Two 'foo's have different number of parameters, so neither of them is not a specialized version of one another. Therefore the ambiguous error is correct result. --