(I think "Array Of Const" or some such)
No the read and write family of functions (as well as some others) are not functions at all and don't follow any rule for function parameters. They are just compiler magic. There is no way, not with array of const, nor with generics or any other in language feature of Pascal to write a function that behaved like read or write(ln)
So write is here a very specific example.
A more common example why result type overloading doesn't work is simply that (at least in Delphi and mode ObjFPC) you do not need to fetch the result of a function
function x: Integer;
...
function x: String;
...
begin
x(); // what to do here?
end;
This is also why the assignment/implicit cast operator works, because it will only ever be called when a conversion must take place, in which case there is a clear target type. That said, if you have something that may convert to two types and you have an overloaded function that takes these types as parameters, there is still the problem of disambiguation. And while I can't test right now, I believe this will simply throw an error and require the user to use an explicit cast