| 31 | class EqualityComparable { |
| 32 | public: |
| 33 | ~EqualityComparable() { |
| 34 | static_assert( |
| 35 | std::is_same<decltype(std::declval<const T>().Equals(std::declval<const T>())), |
| 36 | bool>::value, |
| 37 | "EqualityComparable depends on the method T::Equals(const T&) const"); |
| 38 | } |
| 39 | |
| 40 | template <typename... Extra> |
| 41 | bool Equals(const std::shared_ptr<T>& other, Extra&&... extra) const { |