MarkMLI posted while I was writing this, he is exactly right, "silent selection" is not a good thing.
Thanks for clarifying what is available. This means that there isn't an overloaded function in the library/dll, the type of the string pointer is interpreted according to the format string?
You're welcome and, that is correct. There cannot be an overload because the "..." is generic, it has no associated type. Their type will be determined/interpreted according to the format specifier(s) (which better be correct or else... )
With no further information given to the compiler, why do you think it is wrong to pick the most compact and exact representation of the string literal and choose the provided overload that matches this?
because the case is ambiguous and whatever decision the compiler makes, may or may not be right. In those cases, the least the compiler should do is to let the programmer know that it made a decision which is _not_ guaranteed to be correct. It is the fact that the decision is potentially incorrect that justifies emitting a warning.
There are potentially numerous implicit type conversions applied by the compiler, if the compiler should mention each one it would be more than useless as it will swamp the compiler messages and hide the really important messages.
But normally those conversions are deterministic. IOW, the compiler can figure out what is unambiguously correct. Whenever the compiler doesn't know the answer it's supposed to rely on the programmer to determine what is correct. Compiler "preferences" cannot be used to justify a choice that may or may not be correct. That's the programmer's job but, the programmer relies on the compiler to tell him/her where it made a decision not based on correctness but on "preference".
As far as swamps of compiler messages that hide really important messages, anyone who programs directly to the Windows API (I do) gets a swamp of utterly useless messages because FPC decided that "var" parameters should be initialized. Somewhere in the ballpark of 3/5 of Windows API calls generates one of those useless messages that get in the way of the important ones. The only workaround, you have to write your own API definitions, otherwise you get swamped.
The bottom line is, loads of completely useless messages but, the one message the programmer _really_ needs to have telling him/her that the compiler made the wrong choice, that one, you don't get. It's like giving free shampoo to totally bald people and withholding it from long-hair hippies.