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, "&", "&",
                                                  "&lt;", "<",
                                                  "&gt;", ">",
"&quot;", `"`, "&apos;", "'").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"("&amp;", "&",
                                            "&lt;", "<",
                                            "&gt;", ">",
                                            "&quot;", `"`,
"&apos;", "'").to!string;
```

-- Bastiaan.

Reply via email to