We can already kind of do what you're asking without a language
feature. For instance, if you want to define that something is a
type of range...
struct MyRange { ... }
static assert(isInputRange!MyRange); // won't compile unless
MyRange is an input range
On Wednesday, 9 May 2012 at 15:04:51 UTC, İbrahim Gökhan
YANIKLAR wrote:
// implement foo's without constraints
//------------------------------------------------------------
void foo(Range)(Range r)
if (isInputRange!Range && !isForwardRange!Range)
{ }
void foo(Range)(Range r)
if (isForwardRange!Range && !isBidirectionalRange!Range &&
!isRandomAccessRange!Range)
{ }
void foo(Range)(Range r)
if (isBidirectionalRange!Range && !isRandomAccessRange!Range)
{ }
void foo(Range)(Range r)
if (isRandomAccessRange!Range)
{ }
And these could certainly use some library sugar. How about this:
template isJustInputRange(R) {
enum bool isJustInputRange = isInputRange!R &&
!isForwardRange!R;
}
template isJustForwardRange(R) ...etc...