В следующем коде я определяю две перегрузки, один принимающие целое число, а другая ссылку на целое ...Выбор перегрузка референтного приема функция
#include <stdio.h>
void foo(int) { printf("foo(int)\n"); }
void foo(int&) { printf("foo(int&)\n"); }
Тогда я пытаюсь позвонить два перегруженных
int main(int argc, const char *argv[]) {
foo(3); // Calls foo(int)
int x = 3;
foo(x); // <--- compilation error (ambiguous overload)
int& y = x;
foo(y); // <--- still ambiguous
return 0;
}
... как можно выбрать вопрос перегрузки int&
?
Если это невозможно назвать, какой смысл его компилировать?
'static_cast (foo) (x);' –
Возможно, не прямой обман, так как вы также спрашиваете, почему, но сильно [связанный] (http://stackoverflow.com/ вопросы/1336 8474/ambiguous-call-to-overloaded-function-int-and-int) – George
Зачем добавлять сложность в грамматику, требуя диагностики просто для существования перегрузок? Это все еще две допустимые перегрузки. Проблема заключается в сайте вызова (с его помощью). – StoryTeller