The following code produces an "unreachable code" warning when compiled with -preview=fieldwise: ================================================ struct Empty { bool opCmp(const scope ref Empty) const { return false; } } void main() { import std.variant : VariantN; Empty a, b; assert(a == b); assert(!(a < b)); VariantN!(4, Empty) v = a; assert(v == b); assert(!(v < b)); } ================================================ /dlang/dmd/linux/bin64/../../src/phobos/std/variant.d(261): Warning: statement is not reachable ================================================ The unreachable code follows an equality check for Empty which always returns true, causing an early exit in VariantN.handler.compare. This skips the checks for < and >.
@MoonlightSentinel created dlang/phobos pull request #7622 "Enable preview=fieldwise & fix blocking bug in VariantN" fixing this issue: - Fix 21231 - Unreachable warning for empty struct in VariantN... ... with preview=fieldwise. Equality checks will never fail for instances of empty structs, hence don't generate code checking `<` and `>` for them. This was exposed by `-preview=fieldwise` which (as a side effect) enables dmd to const-fold the aformentioned equality test in the frontend. https://github.com/dlang/phobos/pull/7622
@nordlow created dlang/phobos pull request #7624 "Fieldwise revived" fixing this issue: - Fix 21231 - Unreachable warning for empty struct in VariantN... ... with preview=fieldwise. Equality checks will never fail for instances of empty structs, hence don't generate code checking `<` and `>` for them. This was exposed by `-preview=fieldwise` which (as a side effect) enables dmd to const-fold the aformentioned equality test in the frontend. https://github.com/dlang/phobos/pull/7624
dlang/phobos pull request #7624 "Make Phobos compilable with preview=fieldwise" was merged into master: - c7e49f5afd20e874e2e046d6402b40e5698a282e by MoonlightSentinel: Fix 21231 - Unreachable warning for empty struct in VariantN... ... with preview=fieldwise. Equality checks will never fail for instances of empty structs, hence don't generate code checking `<` and `>` for them. This was exposed by `-preview=fieldwise` which (as a side effect) enables dmd to const-fold the aformentioned equality test in the frontend. https://github.com/dlang/phobos/pull/7624