Why this UDP will not compile?

Marco Leise via Digitalmars-d digitalmars-d at puremagic.com
Sat Sep 27 12:00:39 PDT 2014


Am Sat, 27 Sep 2014 19:19:28 +0530
schrieb d coder via Digitalmars-d
<digitalmars-d at puremagic.com>:

> DMD wont compile this. I get an error saying:
> /tmp/test.d(3): Error: need 'this' for 'foo' of type 'int'
> Failed: ["dmd", "-v", "-o-", "/tmp/test.d", "-I/tmp"]
> 
> Is this a bug or is it illegal code?
> 
> // Regards
> // Cherry
> 
> class Foo {
>   int foo = 42;
>   @foo int bar;
>   this(int frop) {
>     foo = frop;
>   }
>   int getFooAttr() {
>     auto ffff = __traits(getAttributes, this.tupleof[1]);
>     return ffff[0];
>   }
> }
> 
> void main() {
>   Foo f = new Foo(43);
>   f.getFooAttr();
> }

That's incorrect code. UDAs are attached to the item (the ctor
in this case) at compile time and foo is neither compile time
nor static, it is a class instance field. You would need to
use @"foo" and in getFooAttr() go through the getMember trait.

-- 
Marco



More information about the Digitalmars-d mailing list