March 17, 2023
https://issues.dlang.org/show_bug.cgi?id=23791

          Issue ID: 23791
           Summary: Rvalue default argument for ref paramter gives
                    misleading error
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P1
         Component: dmd
          Assignee: nobody@puremagic.com
          Reporter: snarwin+bugzilla@gmail.com

As of DMD 2.102.2, attempting to compile the following program:

---
void f1(ref int n = 123) {}

struct S {}
void f2(ref S s = S.init) {}
---

...produces the following error messages:

---
bug.d(1): Error: cannot modify constant `123`
bug.d(4): Error: `S()` is not an lvalue and cannot be modified
---

These messages are misleading, because the program is not attempting to modify
either `123` or `S()`.

The actual cause of the errors is that rvalues cannot be used as default arguments for `ref` parameters. The messages should reflect this.

--