[Issue 22184] New: std.sumtype.SumType with mutual recursion causes a forward reference of variable `isHashable`
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Fri Aug 6 12:10:34 UTC 2021
https://issues.dlang.org/show_bug.cgi?id=22184
Issue ID: 22184
Summary: std.sumtype.SumType with mutual recursion causes a
forward reference of variable `isHashable`
Product: D
Version: D2
Hardware: x86
OS: Linux
Status: NEW
Severity: regression
Priority: P1
Component: phobos
Assignee: nobody at puremagic.com
Reporter: ttanjo at gmail.com
The following code works with dmd 2.096.1 (uses sumtype via dub) but does not
work since dmd 2.097.0 (uses sumtype or std.sumtype).
I'm not sure it is a regression of std.sumtype or dmd. I tentatively set the
`Component` field to `phobos`.
run.dang.io
- (sumtype): https://run.dlang.io/is/IiGESU
- (std.sumtype): https://run.dlang.io/is/j8rqve
```dlang
import std.sumtype;
class A
{
SumType!B type;
}
class B
{
SumType!C fields;
}
class C
{
SumType!(B, int) type;
}
```
Error message:
```console
/dlang/dmd/linux/bin64/../../src/druntime/import/core/internal/traits.d(191):
Error: forward reference of variable `isHashable`
/dlang/dmd/linux/bin64/../../src/phobos/std/meta.d(842): Error: template
instance `core.internal.traits.allSat!(isHashable, const(B), const(int))` error
instantiating
/dlang/dmd/linux/bin64/../../src/phobos/std/sumtype.d(771): instantiated
from here: `allSatisfy!(isHashable, const(B), const(int))`
onlineapp.d(15): instantiated from here: `SumType!(B, int)`
/dlang/dmd/linux/bin64/../../src/druntime/import/core/internal/traits.d(191):
Error: template instance `std.sumtype.pred!(const(C))` error instantiating
/dlang/dmd/linux/bin64/../../src/phobos/std/meta.d(842): instantiated
from here: `allSat!(isHashable, const(C))`
/dlang/dmd/linux/bin64/../../src/phobos/std/sumtype.d(771): instantiated
from here: `allSatisfy!(isHashable, const(C))`
onlineapp.d(10): instantiated from here: `SumType!(C)`
/dlang/dmd/linux/bin64/../../src/druntime/import/core/internal/traits.d(191):
Error: template instance `std.sumtype.pred!(const(B))` error instantiating
/dlang/dmd/linux/bin64/../../src/phobos/std/meta.d(842): instantiated
from here: `allSat!(isHashable, const(B))`
/dlang/dmd/linux/bin64/../../src/phobos/std/sumtype.d(771): instantiated
from here: `allSatisfy!(isHashable, const(B))`
onlineapp.d(5): instantiated from here: `SumType!(B)`
```
Notes:
- It works if `A` is not available
- It works if `C` has a field whose type is `SumType!B` rather than
`SumType!(B, int)`
--
More information about the Digitalmars-d-bugs
mailing list