On Monday, 11 October 2021 at 15:57:00 UTC, apz28 wrote:
The subject is why the call is not allowed (format is not mention in question). Below sample is a bit more clear

[...]
        ref Writer outFail(Writer, Char)(return ref Writer sink)
        if (isOutputRange!(Writer, Char) && isSomeChar!Char)
        {return sink;}
[...]
        foo.outFail(buffer); // NOT OK

The template parameter `Char` does not appear anywhere in the function's parameter list, so the compiler cannot deduce it from the function's arguments.

Here is a simpler example that demonstrates the same problem:

```d
Dest convert(Source, Dest)(Source source)
{
    return cast(Dest) source;
}

void main()
{
    double d = 123.456;
    auto result = convert(d); // Source = double, Dest = ???
}
```

Reply via email to