2 votes

Pourquoi l'appel de la fonction n'est pas ambigu dans la SFINAE ?

J'utilise SFINAE pour vérifier si une classe possède la fonction 'print()' ou non. Le code fonctionne mais pourquoi appeler has_print() n'est pas ambiguë ?

class cls {
public:
    void print() {
        std::cout << "some text" << std::endl;
    }
};

template<typename T>
auto has_print(T tt) -> decltype(T().print(), std::true_type()) {
    tt.print();
    return std::true_type();
}

std::false_type has_print(...) {
    std::cout << "Doesn't contain print()" << std::endl;
    return std::false_type();
}

int main() {
    cls c;
    has_print(c);

    return 0;
}

Il pourrait correspondre aux deux.

3voto

songyuanyao Points 2265

Il pourrait correspondre aux deux.

Sur résolution des surcharges la première surcharge l'emporte sur la seconde qui prend le paramètre ellipsis.

  1. Une séquence de conversion standard est toujours préférable à une séquence de conversion définie par l'utilisateur ou à une séquence de conversion par ellipse.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X