has_equal_operator Implementierung in C ++ 11

9

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?

%Vor%

Ausgabe:

%Vor%     
Yatima 12.05.2016, 04:55
quelle

1 Antwort

3
  

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.

    
T.C. 12.05.2016, 05:39
quelle

Tags und Links