You're thinking about the implicit conversion from a null pointer
constant (which 0 qualifies as) to a null pointer of any particular
type. std::string doesn't have a constructor from a single integer type
of any size, not even "char", but it does have a constructor from a
char* value.
However, the description for that constructor has says:"Requires: s
points to an array of at least traits::length(s) + 1 elements of charT."
(24.3.2.2p10).
Note: this description is for std::basic_string<charT, traits,
Allocator>. In the context of std::string, "traits" refers to
std::char_traits<char>.
As a null pointer, (char*)0 is prohibited from pointing at any object,
so it cannot meet that requirement.