Почему C ++ воспринимает это как неоднозначную ссылку на функцию

Почему мой компилятор может увидеть следующий указатель на функцию 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?

6
задан Mordachai 16 November 2011 в 18:39
поделиться