JXXON object mapper library
EqualTo.h
1 //
2 // Copyright (C) 2018 Dr. Michael Steffens
3 //
4 // SPDX-License-Identifier: BSL-1.0
5 //
6 
7 
8 #ifndef JXXON_EqualTo_INCLUDED
9 #define JXXON_EqualTo_INCLUDED
10 
11 #include "JXXON/IsSharedPtr.h"
12 #include <functional>
13 
14 namespace JXXON {
15 
16 template<typename T, typename Enable = void>
17 struct EqualTo;
18 
20 template<typename T>
21 struct EqualTo<T, typename std::enable_if<!IsSharedPtr<T>::value>::type>
22 {
23  bool operator()(const T& lhs, const T& rhs) const
24  {
25  return std::equal_to<T>()(lhs, rhs);
26  }
27 };
28 
30 template<typename T>
31 struct EqualTo<T, typename std::enable_if<IsSharedPtr<T>::value>::type>
32 {
33  bool operator()(const T& lhs, const T& rhs) const
34  {
35  return lhs && rhs ? std::equal_to<typename T::element_type>()(*lhs, *rhs) : !lhs && !rhs;
36  }
37 };
38 
39 } // namespace JXXON
40 
41 #endif // JXXON_EqualTo_INCLUDED
JXXON root namespace.
Definition: Deque.h:14
Definition: EqualTo.h:17