+
+struct CheckEqualityComparable: Sfinae
+{
+ static int &v;
+ template<typename T>
+ static Yes f(int (*)[sizeof(reinterpret_cast<const T &>(v)==reinterpret_cast<const T &>(v))]);
+ using Sfinae::f;
+};
+
+template<typename T>
+struct IsEqualityComparable: Sfinae::Evaluate<CheckEqualityComparable, T> { };
+