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

Steven Schveighoffer schveiguy at yahoo.com
Wed Dec 15 05:16:29 PST 2010


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.

-Steve


More information about the Digitalmars-d mailing list