0 can be used as a null pointer constant (similar to nullptr) so this will call the const char* constructor that is normally used when constructing an std::string from a string literal (e.g. std::string str = "abc";). This constructor does not expect the pointer to be null so that is why it doesn't work.
The easiest way to create an empty string is to do nothing. The default constructor will automatically initialize the string to be empty.