Articles of résolution de surcharge

Résolution de surcharge: Comment cela n’est-il pas ambigu?

Supposons que nous ayons ce code, copié à partir d’une question distincte: namespace x { void f() { } class C { void f() { using x::f; f(); // <== } }; } Le nom f sur la ligne indiquée se réfère sans ambiguïté à x::f (au moins selon gcc et clang). Pourquoi x::f préféré […]

Comment vider les candidats en résolution de surcharge?

Comment puis-je vider les fonctions candidates (ou les fonctions viables ou les meilleures fonctions viables) pour une invocation de fonction? Je sais que g ++ fournit une option pour vider la hiérarchie des classes . (En fait, Visual Studio 2010 fournit une option similaire, mais elle n’est pas documentée. Je me souviens d’avoir lu quelque […]

Surcharge incorrecte sélectionnée pour le manipulateur de stream

Voici le code: #include #include #include #if 0 std::ostream &foo(std::ostream &os, std::ios_base &(*x)(std::ios_base &), bool show_id = false) { if ( show_id ) os << "(" << typeid(x).name() << ") "; return os << x; } #endif template std::ostream &foo(std::ostream &os, T const &t, bool show_id = false) { if ( show_id ) os << […]

Comment la résolution de surcharge fonctionne-t-elle dans le contexte d’un modificateur privé?

Je ne parviens pas à comprendre le résultat du fragment C ++ suivant. objc.fn() ne doit pas appeler la fonction fn() car la fonction fn() de B est private et ne doit pas être visible dans C Cependant, la réponse est la suivante: l’appel à fn() est ambigu. Comment? #include using namespace std; class A{ […]

L’initialisation de liste et la résolution de surcharge ayant échoué du constructeur initializer_list

La compilation ci-dessous ne parvient pas à la compilation avec clang35 -std=c++11 : #include #include #include class A { public: A(int, bool) { std::cout << __PRETTY_FUNCTION__ << std::endl; } A(int, double) { std::cout << __PRETTY_FUNCTION__ << std::endl; } A(std::initializer_list) { std::cout << __PRETTY_FUNCTION__ << std::endl; } }; int main() { A a1 = {1, 1.0}; […]

En résolution de surcharge, la sélection d’une fonction qui utilise la séquence de conversion ambiguë entraîne-t-elle nécessairement une mauvaise formation de l’appel?

La question s’est posée pendant que je cherchais la réponse à cette question SO . Considérons le code suivant: struct A{ operator char() const{ return ‘a’; } operator int() const{ return 10; } }; struct B { void operator<< (int) { } }; int main() { A a; B b; b << a; } La […]

fonction membre masquant la fonction libre

void foo(int) { } class X { void foo() { } void bar() { foo(42); // error: no matching function for call to ‘X::foo(int)’ // note: candidate is: // note: void X::foo() // note: candidate expects 0 arguments, 1 provided } }; Pourquoi C ++ ne peut-il pas appeler la fonction free (qui est la […]

Un argument lvalue préfère-t-il un paramètre de référence lvalue à une référence universelle?

En jouant avec des références universelles, je suis tombé sur un cas où clang et gcc sont en désaccord sur la résolution de surcharge. #include struct foo {}; template void bar(T&) { std::cout << "void bar(T&)\n"; } template void bar(T&&) { std::cout << "void bar(T&&)\n"; } int main() { foo f; bar(f); // ambiguous on […]

Forcer la résolution tardive de la méthode en cas d’inheritance de classe en c ++

Considérez la structure de classe suivante: – class foo { public: int fun () { cout << "in foo" << endl; } }; class bar_class1:public foo { public: int fun () { cout << "in bar_class1" << endl; } }; class bar_class2:public foo { public: float fun () { cout << "in bar_class2" <fun(); } […]

Construction de libspline pour Matlab sous Windows – appel ambigu à la fonction surchargée ‘pow’

J’essaie de construire libspline pour Matlab sous Windows, disponible ici: http://ttic.uchicago.edu/~smaji/projects/libspline-release1.0.tar.gz Je reçois l’erreur suivante: >> make additiveModel.cpp additiveModel.cpp(156) : error C2668: ‘pow’ : ambiguous call to overloaded function C:\Program Files\Microsoft Visual Studio 10.0\VC\INCLUDE\math.h(583): could be ‘long double pow(long double,int)’ C:\Program Files\Microsoft Visual Studio 10.0\VC\INCLUDE\math.h(535): or ‘float pow(float,int)’ C:\Program Files\Microsoft Visual Studio 10.0\VC\INCLUDE\math.h(497): or ‘double […]