C++ guys hate static_if?
TommiT
tommitissari at hotmail.com
Tue Mar 12 04:39:48 PDT 2013
On Tuesday, 12 March 2013 at 04:34:05 UTC, Walter Bright wrote:
> It's interfaces without the vtable[].
>
> It's still solely based on type signatures. D constraints make
> pretty much anything that can be computed at compile time a
> testable gate.
Yeah, you're right. That kind of interface syntax doesn't really
lend itself to specifying concepts. So, here's another attempt at
a concept syntax (and functionality):
concept AscendingInfiniteInputRange {
// 'this' is an instance of a type which implements the
// AscendingInfiniteInputRange concept given the
// if-condition below is true:
if( is(typeof(this.empty) : bool)
&& is(typeof(this.front))
&& !is(typeof(this.front) == void)
&& is(typeof(this.popFront() == void)
// testing a compile time evaluable value:
&& this.empty == false
// static members can also be tested:
&& typeof(this).infinite == true
&& typeof(this).sortedAscending == true )
}
// extending the AscendingInfiniteInputRange concept:
concept AscendingInfiniteForwardRange
: AscendingInfiniteInputRange
{
if (is(typeof(this.save) == typeof(this)))
}
// a concept of a 2-dimensional infinite ascending slope:
concept InfiniteSlope : AscendingInfiniteForwardRange {
// 'is' can be used to test if a type implements a concept:
if (is(typeof(this.front) == AscendingInfiniteForwardRange))
}
More information about the Digitalmars-d
mailing list