www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 22572] New: Cannot define SumType over immutable struct with


          Issue ID: 22572
           Summary: Cannot define SumType over immutable struct with
           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

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