On Tuesday, 28 October 2025 at 20:08:41 UTC, H. S. Teoh wrote:
On Tue, Oct 28, 2025 at 07:43:56PM +0000, Bastiaan Veelo via
Digitalmars-d-learn wrote:
Why doesn't this compile?
```d
import std;
void main()
{
string s;
//...
s = s.substitute!((a, b) => sicmp(a, b) == 0, "&", "&",
"<", "<",
">", ">",
""",
`"`,
"'",
"'").array;
}
```
You have all your arguments as CT arguments; I think
.substitute wants the lamdba as a CT argument but the other
arguments as RT.
But having said that, after changing the substitution arguments
to RT arguments, it still doesn't compile for me for some
reason. So I dunno.
T
This seems to be a bug. It does work with runtime arguments, but
only if the predicate is given as a string:
```d
s = s.substitute!"a.toLower==b.toLower"("&", "&",
"<", "<",
">", ">",
""", `"`,
"'",
"'").to!string;
```
-- Bastiaan.