Почему мой компилятор может увидеть следующий указатель на функцию GetLength как неоднозначный
псевдокод:
size_t GetLength(char*);
size_t GetLength(wchar_t*);
struct ITEM { };
double GetLength(ITEM*);
CString GetInfo(ITEM * item, std::function<double (ITEM*)> fn)
{
... omitted for clarity
}
ITEM * item = new ITEM;
cout << GetInfo(item, GetLength); // <- ambiguous error
GetInfo допускает только что-то вроде шаблона аргумента двойной возврат + ITEM *. Так почему же он учитывает (а не отбрасывает) две строковые вариации GetLength?