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


Reply via email to