Как этот вызов функции неоднозначен в C ++?

Рассмотрим следующую программу: (Смотрите живую демонстрацию здесь http://ideone.com/7VHdoU )

#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) делает компиляцию успешной.

4

Решение

Вероятно, 3 можно интерпретировать как другие типы (например, char, unsigned…), так что компилятору может быть неоднозначно знать, какую функцию вы хотите вызвать. Вы должны указать значение 3 является long int,

#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((long int)3);
}
void fun(long int a)
{
std::cout<<a<<'\n';
}
2

Другие решения

Других решений пока нет …