You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
As of DMD 2.107.1, the following program fails to compile:
---
struct S
{
int* dummy;
this(ref immutable S) {}
}
void main()
{
immutable(S) s1;
S s2 = s1; // ok
auto arr1 = [immutable(S)()];auto arr2 = arr1.dup; // error
}
---
The error message is:
---
bug.d(13): Error: none of the overloads of template `object.dup` are callable using argument types `!()(immutable(S)[])`
/usr/include/dmd/druntime/import/object.d(3007): Candidates are: `dup(T : V[K], K, V)(T aa)`
/usr/include/dmd/druntime/import/object.d(3045): `dup(T : V[K], K, V)(T* aa)`
/usr/include/dmd/druntime/import/object.d(3835): `dup(T)(T[] a)`
with `T = immutable(S)`
must satisfy the following constraint:
` !is(const(T) : T)`
/usr/include/dmd/druntime/import/object.d(3858): `dup(T)(const(T)[] a)`
with `T = S`
must satisfy the following constraint:
` is(const(T) : T)`---
dup should be able to create a mutable copy of an immutable S using the appropriately-qualified copy constructor. However, it fails to do so, because its template constraint is too strict.
This bug was originally reported in issue 20879.
The text was updated successfully, but these errors were encountered:
Paul Backus (@pbackus) reported this on 2024-03-08T15:15:00Z
Transferred from https://issues.dlang.org/show_bug.cgi?id=24432
Description
The text was updated successfully, but these errors were encountered: