digitalmars.D.bugs - [Issue 22572] New: Cannot define SumType over immutable struct with
- d-bugmail puremagic.com (47/47) Dec 06 2021 https://issues.dlang.org/show_bug.cgi?id=22572
https://issues.dlang.org/show_bug.cgi?id=22572 Issue ID: 22572 Summary: Cannot define SumType over immutable struct with Nullable Product: D Version: D2 Hardware: x86_64 OS: Linux Status: NEW Severity: normal Priority: P1 Component: dmd Assignee: nobody puremagic.com Reporter: default_357-line yahoo.de Not sure if Phobos or DMD issue. Consider this code: import std; immutable struct Value { Nullable!string n; } void main() { SumType!Value value; } This gets /dlang/dmd-nightly/linux/bin64/../../src/phobos/std/sumtype.d(1985): Error: static assert: "`handlers[0]` of type `template` never matches" If we replace Nullable with a simpler struct: struct CopyConstruct { this(ref CopyConstruct other) { } } immutable struct Value { CopyConstruct c; } void main() { SumType!Value value; } Then we get the revealing error: Error: Generating an `inout` copy constructor for `struct onlineapp.Value` failed, therefore instances of it are uncopyable It looks like Nullable's copy constructor does not play well with immutable structs. The strange `handler never matches` error above seems to only arise because DMD manages to defer this error until the SumType handler. But this is not the primary issue. --
Dec 06 2021