Reducing template constraint verbosity? [was Re: Slides from my ACCU Silicon Valley talk]

Steven Schveighoffer schveiguy at yahoo.com
Wed Dec 15 05:26:33 PST 2010


On Wed, 15 Dec 2010 08:16:29 -0500, Steven Schveighoffer  
<schveiguy at yahoo.com> wrote:

> On Wed, 15 Dec 2010 04:34:53 -0500, Daniel Murphy  
> <yebblies at nospamgmail.com> wrote:
>
>> "Patrick Down" <pat at codemoon.com> wrote in message
>> news:ie8kei$1gdg$1 at digitalmars.com...
>>> Would it help to allow 'else' and 'else if' on the template  
>>> constraints?
>>>
>>> void foo(R)(R r) if(isRandomAccessRange!R)
>>> {...}
>>> else if(isInputRange!R)
>>> {...}
>>>
>>> This could basically be translated into two specializations like this:
>>>
>>> void foo(R)(R r) if(isRandomAccessRange!R) {...}
>>> void foo(R)(R r) if(isInputRange!R && !isRandomAccessRange!R) {...}
>>>
>>>
>>
>> You can sorta already do this...
>>
>> template foo(R)
>> {
>>     static if (isRandomAccessRange!R)
>>         foo(R r) {}
>>     else static if (isInputRange!R)
>>         foo(R r) {}
>>     else
>>         static assert(0, "R must be at least an input range");
>> }
>
> The compiler doesn't treat this the same:
>
> 1. no ifti
> 2. if no branches accept the R type, it tries another template.

that #2 should be it *does not try* another template.  Template  
constraints do try it.

-Steve


More information about the Digitalmars-d mailing list