"std::string" accepts a pointer to a "char" as a constructor argument. Because of "std::string"'s conversion constructor, the two prototypes are ambiguous, and the compiler will not be able to determine which overload the caller requested. There's 2 ways to disambiguate a function call:
1) Tagging. Tagging is used to resolve seemingly ambiguous function calls by passing a "tag" to the function. For instance:
2) Differentiate the prototypes. A compiler will be able to resolve an ambiguous function call if 2 of the following differ from the other overloads: Return-type, parameters, and function const-ness.