On Monday, 9 November 2015 at 22:06:22 UTC, Alex Parrill wrote:
Check out the following code:


        struct Test {
                int foo() {
                        return 2;
                }
                int bar() @property {
                        return 2;
                }
        }

pragma(msg, typeof(Test.foo)); // Prints int(); i.e. a zero-argument function that returns an int
        pragma(msg, typeof(Test.bar)); // Prints int; i.e. a plain int
But the compiler is lying!

void main() {
    auto a = Test();
    auto aa = &a.bar; // if type of a.bar is int
writeln(*aa); // why: Error: can only * a pointer, not a 'int delegate() @property'
}

AFAIK when @property was introduced, it was expected that after a deprecation period, calling non-property functions without parenthesis would be invalid, but I don't think that panned out. It's still good for documentation.

If this feature will be removed, it will be very lacking code, like:

writeln = "Hello, world!";

:)
WBR,
    Fyodor.

  • @property Fyodor Ustinov via Digitalmars-d-learn
    • Re: @property Alex Parrill via Digitalmars-d-learn
      • Re: @property Fyodor Ustinov via Digitalmars-d-learn
    • Re: @property Kagamin via Digitalmars-d-learn

Reply via email to