www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 21680] New: inconsistent error on `typeof({ return field; }())`

https://issues.dlang.org/show_bug.cgi?id=21680

          Issue ID: 21680
           Summary: inconsistent error on `typeof({ return field; }())`
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Keywords: accepts-invalid, rejects-valid
          Severity: normal
          Priority: P1
         Component: dmd
          Assignee: nobody puremagic.com
          Reporter: ag0aep6g gmail.com

Encountered while working on issue 20655.

Works:

----
struct Unique
{
    int field;
    alias ValueType = typeof({ return field; }());
}
----

Doesn't work (only change is in order of declarations):

----
struct Unique
{
    alias ValueType = typeof({ return field; }()); /* Error: need `this` for
`field` of type `int` */
    int field;
}
----

Works again (only change is in type of `field`):

----
struct Unique
{
    alias ValueType = typeof({ return field; }());
    int* field;
}
----

Either all should work, or all should fail with the same error.

I'm inclined to say that the error is correct. Razvan leans towards accepting
all snippets [1]. Depending on which stance we end up with, this is either an
accepts-invalid or a rejects-valid bug.


[1] https://github.com/dlang/dmd/pull/10884#issuecomment-790466796

--
Mar 04 2021