isRef, isLazy, isOut

Eldar Insafutdinov e.insafutdinov at gmail.com
Sun Dec 20 14:44:46 PST 2009


Max Samukha Wrote:

> On 19.12.2009 23:00, Walter Bright wrote:
> > Andrei Alexandrescu wrote:
> >> I asked in vain for is(var == ref), is(var == out) etc.
> >
> > That's because 'is' works with types, not symbols. It didn't fit.
> 
> Will there be a way to get storage classes from function symbols or types?
> 
> Currently, we have to use a Signature template that, along with 
> parameter and return types, extracts storage classes by parsing the 
> value of parameter type tuple's stringof. Ugly and unreliable. We need a 
> way to do it without resorting to hacks. Something in this vein:
> 
> enum StorageClasses
> {
>    ...
> }
> 
> class A
> {
>   ref int foo(const ref int a, lazy int b) const;
>   void bar(out a);
> }
> 
> assert(__traits(storageClasses, A.foo) == StorageClasses.Const | 
> StorageClasses.Ref);
> assert(__traits(parameterStorageClasses, A.foo) == [StorageClasses.Const 
> | StorageClasses.Ref, StorageClasses.Lazy]);
> 
> See also http://d.puremagic.com/issues/show_bug.cgi?id=1818
> 
> 

Please, please...



More information about the Digitalmars-d mailing list