Dans le code suivant je définir deux surcharges, on accepter un entier et l'autre référence à un nombre entier ...Sélection surcharge fonction acceptant référence
#include <stdio.h>
void foo(int) { printf("foo(int)\n"); }
void foo(int&) { printf("foo(int&)\n"); }
Je suis en train d'appeler les deux
surchargesint 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;
}
la question est ... comment la surcharge int&
peut être sélectionné?
S'il ne peut pas être appelé, à quoi sert-il de le compiler?
'static_cast (foo) (x);' –
Peut-être pas direct dupe, puisque vous demandez aussi pourquoi, mais très [connexes] (http://stackoverflow.com/ questions/1336 8474/ambiguous-call-to-overloaded-function-int-and-int) – George
Pourquoi ajouter de la complexité à la grammaire en exigeant un diagnostic simplement pour l'existence de surcharges? Ce sont toujours deux surcharges valides. Le problème est sur le site d'appel (avec des moyens autour de lui). – StoryTeller