It looks like something ate your actual warning lines. All gcc warnings have the word "warning" in at least one of the lines.
EDIT Some builds of gcc
actually produce similar messages ("note" lines, "required from" lines, "instantiated from" lines... but no actual "error" or "warning" line). It looks like there's a bug in gcc. — end edit.
Out of all gcc warnings, I know of only one that is related to overloading and has "note" submessages that lists candidate functions. The warning reads
C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second
and it cannot be turned off. If you see such warning, your program is non-compliant and you should fix it.
Here's an example of such non-compliant code. with function signatures matching yours:
#include <string>
struct KeyWord
{
KeyWord(const std::string&);
operator std::string&() const;
};
struct A
{
bool operator() (const std::string&, const std::string&) const;
bool operator() (const KeyWord&, const KeyWord&);
};
int main ()
{
A a;
std::string s;
const std::string r;
a(s, r);
}
Making the second operator()
const
solves the problem.