Рассмотрим следующую программу: (См видеодемонстрацию здесь http://ideone.com/7VHdoU)Как этот вызов функции неоднозначен в C++?
#include <iostream>
void fun(int*)=delete;
void fun(double)=delete;
void fun(char)=delete;
void fun(unsigned)=delete;
void fun(float)=delete;
void fun(long int);
int main()
{
fun(3);
}
void fun(long int a)
{
std::cout<<a<<'\n';
}
Компилятор дает следующее сообщение об ошибке:
error: call of overloaded 'fun(int)' is ambiguous
fun(3);
^
Но я не понимаю, почему & как это неоднозначно? Включает ли это какое-либо автоматическое продвижение по типу? Я знаю, что вызов fun (3L) делает компиляцию успешной.
Это неоднозначное, потому что ни одна из функций, заявивших не принимают простой 'int', и компилятор не может выбрать, следует ли преобразовать в' double', '' char', без знака int', 'float' или' длинный int'. Функции 'delete'd все еще участвуют в разрешении перегрузки. – user657267
@ user657267 Я думаю, вы можете добавить это в качестве ответа :) – KennethLJJ
@ user657267: Лучше, если вы добавите его в качестве ответа, чтобы я мог его принять. – Destructor