Passing a pointer to a function (even a const pointer), opens up the opportunity to change the data in the memory the pointer points to.
Therefore an auto conversion to const char* opens up the possibility of directly modifying the string buffer of the std::string object instance, without updating the metadata variable of the object instance. Bad. std::string has an API, including some nice convenient operators that tie into it to perform functions on the data it contains.
It is basically a std::vector for char data, with extras for common string work. A pointer is a blind address container, just an unsigned integer. You can get string::data() as a char pointer, even so. With that you can read or change the characters (but not the size of the buffer!).
(Note: c++98 string::data() returns a non-null_terminated char array pointer, C++11 and newer do return a null-terminated array.)
So what then if you mess up and assign the char pointer to some other char array inside the function? Not much, but it does not affect the std::string object outside the function, or its internal char buffer.
So they made that conversion to a "lower form" of string explicit, because it is too easy to make a mistake that might not be caught at compile time, and probably would be hard to debug at runtime.
Additionally, a pointer to an empty string instance buffer, is not a NULL pointer, and there is no way to know if the data in the string buffer is initialized to good values beforehand. const char* is a legacy form of string, but is just too convenient not to use and so on.