Given the following methods:
// Method 1
void add(const std::string& header, bool replace);
//Method 2
void add(const std::string& name, const std::string& value);
It would appear that the following code will end up calling method 1 instead of method 2:
something.add("Hello", "World");
I ended up creating another method that looks like this:
//Method 3
void MyClass::add(const char* name, const char* value) {
add(std::string(name), std::string(value));
}
It worked. So it would seem that when a method accepts a “quoted string” it will match in the following order:
const char*boolstd::string
Why would a quoted string be treated as a bool before a std::string? Is this the usual behavior? I have written a decent amount of code for this project and haven’t had any other issues with the wrong method signature being selected…
My guess is the conversion from pointer to bool is an implicit primitive type conversion, where the conversion to
std::stringrequires the call of a constructor and the construction of a temporary.