Is this a bug in Nullable or in compiler?

Andrey Zherikov andrey.zherikov at gmail.com
Mon Nov 28 11:07:21 UTC 2022


The following code doesn't compile:
```d
struct S
{
     Nullable!S delegate() f;
}
```
Output from DMD:
```
/dlang/dmd/linux/bin64/../../src/druntime/import/core/internal/traits.d(345): Error: unable to determine fields of `S` because of forward references
/dlang/dmd/linux/bin64/../../src/phobos/std/traits.d(3327): 
Error: template instance 
`core.internal.traits._hasIndirections!(S)` error instantiating
/dlang/dmd/linux/bin64/../../src/phobos/std/typecons.d(2768):     
    instantiated from here: `hasIndirections!(S)`
onlineapp.d(4):        instantiated from here: `Nullable!(S)`
/dlang/dmd/linux/bin64/../../src/druntime/import/core/internal/traits.d(16): Error: unable to determine fields of `S` because of forward references
/dlang/dmd/linux/bin64/../../src/druntime/import/core/internal/traits.d(269): Error: template instance `core.internal.traits.Fields!(S)` error instantiating
/dlang/dmd/linux/bin64/../../src/phobos/std/typecons.d(2790):     
    instantiated from here: `hasElaborateDestructor!(S)`
onlineapp.d(4):        instantiated from here: `Nullable!(S)`
```
I'm not sure whether it's a big in Nullable or in compiler 
because `pragma(msg, S.sizeof)` doesn't work either.

I tried different variants like `function` instead of `delegate` 
and putting `Nullable` to parameters like `void 
function(Nullable!S) f;` - but they don't work either.


More information about the Digitalmars-d mailing list