C++ guys hate static_if?

TommiT tommitissari at hotmail.com
Tue Mar 12 07:37:06 PDT 2013


On Tuesday, 12 March 2013 at 14:24:11 UTC, TommiT wrote:
> The difference is in function overload resolution. Polymorphic 
> concept based template would know about the hierarchical nature 
> of the concepts, say ForwardRange is a sub-concept of 
> InputRange, and thus the function overload resolution would be 
> able to choose the template which has the most 
> derived/specialized concept parameter that still matches with 
> the given template argument.

Example:

void foo(R)(R) if (isInputRange!R) { }
void foo(R)(R) if (isForwardRange!R) { }

int[] arr;
foo(arr); // ambiguity error

// Polymorphic concept to the rescue:

concept InputRange {
     // definition of the concept
     ...
}

// ForwardRange is an extension of InputRange
concept ForwardRange : InputRange {
     ...
}

void bar(InputRange R)(R) { }
void bar(ForwardRange R)(R) { }

int[] arr;
bar(arr); // calls the second one


More information about the Digitalmars-d mailing list