digitalmars.D - Why this UDP will not compile?
- d coder via Digitalmars-d (21/21) Sep 27 2014 DMD wont compile this. I get an error saying:
- Marco Leise (9/34) Sep 27 2014 Am Sat, 27 Sep 2014 19:19:28 +0530
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(); }
Sep 27 2014
Am Sat, 27 Sep 2014 19:19:28 +0530 schrieb d coder via Digitalmars-d <digitalmars-d 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
Sep 27 2014