New syntax proposal for template type parameter contraints
    Kagamin via Digitalmars-d 
    digitalmars-d at puremagic.com
       
    Wed May 21 23:38:35 PDT 2014
    
    
  
On Friday, 16 May 2014 at 20:31:40 UTC, Phil Lavoie wrote:
> The idea is to eventually be able to do something like this:
>
> constraint InputRange(Elt) {
>   Elt front();
>   void popFront();
>   bool empty();
> }
I have a similar idea, but I think of it as a type inference 
mechanism:
@inference
template InputRange(E=Any, S=void) {
  static if (is(S.front))
   static if (is(E==Any)||is(E==ElementType!S)) alias InputRange = 
S;
   else alias InputRange = Mismatch!"element type mismatch";
  else alias InputRange = Mismatch!"need `front` member";
}
Here E is optional parameter, which can be used to constrain 
range element type, or may be omitted to accept any element type. 
S is type of right hand expression. As a bonus, this template can 
substitute type.
    
    
More information about the Digitalmars-d
mailing list