DIP 84: Static Inheritance

Iakh via Digitalmars-d digitalmars-d at puremagic.com
Thu Feb 25 04:04:50 PST 2016


On Thursday, 25 February 2016 at 09:11:58 UTC, Atila Neves wrote:
> On Thursday, 25 February 2016 at 01:57:37 UTC, Iakh wrote:
>> On Friday, 30 October 2015 at 14:39:47 UTC, Atila Neves wrote:
>>> [...]
>>
>> It could be better to extend UDA with checking and diagnostic 
>> functions
>>
>> @IsInputRange
>> struct myRange {...
>>
>> And some attrs not applicable for all things, extended UDA can 
>> handle it
>
> Scanning for UDAs for a whole project isn't trivial and even 
> worse optional.
>
> Atila

I meant extend UDAs to match your proposal. But rules to build 
failFunc in both cases looks too sophisticated.
Simpler version could looks like this:

// Predicate:
enum bool checkConstraint(bool verbose) = /*Whatever you want*/

struct Struct{
     mixin checkConstraint!(isOutputRange, int); // int represents 
tail template args
}

mixin checkConstrint!(...) adds this code:
static if(!isOutputRange!(Struct, 
int).checkConstraint!(No.verbose))
{
     static assert(isOutputRange!(Struct, 
int).checkConstraint!(Yes.verbose));
}


More information about the Digitalmars-d mailing list