https://issues.dlang.org/show_bug.cgi?id=21198
Issue ID: 21198
Summary: Inout copy constructor on union field does not prevent
copy-initialization of union
Product: D
Version: D2
Hardware: x86_64
OS: Linux
Status: NEW
Severity: normal
Priority: P1
Component: dmd
Assignee: [email protected]
Reporter: [email protected]
Example program:
---
struct S
{
this(ref inout(S) other) inout {}
}
union U
{
S s;
}
static assert(!__traits(compiles,
(U original) { U copy = original; }
));
---
The language spec says:
> If a union S has fields that define a copy constructor, whenever an object of
> type S is initialized by copy, an error will be issued. The same rule applies
> to overlapped fields (anonymous unions).
According to this paragraph, the static assert above should pass. However, as
of DMD 2.093.1, it fails.
--