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.109.1, the following program fails to compile:
---
enum E { One }
inout(E) fun(inout(E) e)
{
import std.conv;
auto s = e.to!string;
return e;
}
---
The error message is:
---
/usr/include/dmd/phobos/std/conv.d(1227): Error: variable `std.conv.value` - only parameters or stack-based variables can be `inout`
/usr/include/dmd/phobos/std/conv.d(210): Error: template instance `std.conv.toImpl!(string, inout(E))` error instantiating
bug.d(6): instantiated from here: `to!(inout(E))`---
This error occurs because toImpl attempts to pass an inout(E) value as an argument to the template enumRep. The instantiation fails because inout values cannot be used as template arguments:
---
enum E { One }
enum example(T, T value) = true;
alias test = example!(inout(E), E.One);
// Error: only parameters or stack-based variables can be `inout
---
The text was updated successfully, but these errors were encountered:
private template enumRep(T, S, S value)
if (is (T == immutable) && isExactSomeString!T && is(S == enum))
{
static T enumRep = toStr!T(value);
}
If I mark the argument as immutable, then it compiles:
private template enumRep(T, S, immutable S value)
Presumably for enums it should be fine.
Invoking with enumRep!(immutable(T), immutable(S), member) works too.
snarwin+bugzilla (@pbackus) reported this on 2024-11-25T15:46:38Z
Transfered from https://issues.dlang.org/show_bug.cgi?id=24880
Description
The text was updated successfully, but these errors were encountered: