Metaprogramming in D : Some Real-world Examples
    grauzone 
    none at example.net
       
    Wed Nov 11 08:23:29 PST 2009
    
    
  
Don wrote:
> Christopher Wright wrote:
>> grauzone wrote:
>>> You're not testing for types, you're testing if it compiles. Inside 
>>> the tested block of code, all sorts of things could go wrong. You 
>>> can't know if is(typeof(...)) really did what you wanted, or if 
>>> something broke.
> 
> You're testing, "is everything inside that OK?". If you want to know WHY 
> it's wrong, you'd better make sure you're testing something simple.
Andrei's range lib uses it more in a way "does this type support this 
and that range interface?". Example: 
http://dsource.org/projects/phobos/browser/trunk/phobos/std/range.d#L58
>> So it requires caution, and you want to keep the contents small. It's 
>> useful, but it requires caution.
> 
> I don't even think it particularly requires caution. If it passes, you 
> know everything is OK. It's just that it's an all-or-nothing test.
And if it doesn't pass, you know something is not ok? Then shouldn't you 
raise an error? Oh wait...
> IMHO, one of the best features of it, is that you can have negative 
> compile-time unit tests. You can create tests which must be rejected at 
> compile time. I don't know of any other clean way to do that.
True; that's another use of this feature.
    
    
More information about the Digitalmars-d-announce
mailing list