Ich versuche, has_equal_operator
in C ++ 11 zu implementieren und bis jetzt kam folgende Lösung. Es funktioniert für einfache Fälle wie int
oder struct A{}
, scheitert aber (gibt false positive aus) für std::vector<A>
. Warum scheitert es und wie behebt man das?
Ausgabe:
%Vor%Warum schlägt es fehl?
std::vector<A>
hat eine Nicht-Mitglied operator==
-Funktionsvorlage, was eine Übereinstimmung mit der ==
in std::declval<T>() == std::declval<T>()
in Ihrem Code darstellt. So ist der Check erfolgreich.
Die Tatsache, dass der Rumpf dieser Funktionsvorlage nicht kompiliert wird, ist für SFINAE irrelevant; Wichtig ist nur, dass die Erklärung gültig ist.
Wie behebt man das?
Die einzige Möglichkeit, die mir einfällt, ist die manuelle Spezialisierung Ihres Merkmals für Standardcontainer.
Tags und Links c++ c++11 typetraits