On Wed, 15 Jul 2009 20:00:40 +0200, BLS <[email protected]> wrote:
>Jarrett Billingsley wrote: >> On Wed, Jul 15, 2009 at 1:42 PM, BLS<[email protected]> wrote: >>> Quote : " >>> Constraints are not involved with determining which template is more >>> specialized than another. " >> >> Well that is *completely* lame. I would have expected >> >> template Foo(int N : 5) >> >> to be sugar for >> >> template Foo(int N) if(N == 5) >> >> Why *isn't* that the case? > >Tu me demande ? Pas d' idee. ..have to ask the gurus And template oveloading with refined concepts is not supported, which makes constraints less useful than C++'s concepts: // InputRange concept template isInputRange(T) { .... } // Refinement of InputRange concept template isForwardRange(T) { enum isForwardRange = isInputRange!T && ....; } void foo(T)(T r) if (isInputRange!T) { } void foo(T)(T r) if (isForwardRange!T) { } void bar() { ForwardRange fr; InputRange ir; foo(fr); foo(ir); } The above doesn't compile, of course. The limitation can be worked around in a number of graceless ways but claiming that D's constraints are superior to C++ concepts seems to be premature.
