7 #ifndef PXR_EXEC_VDF_TRAITS_H
8 #define PXR_EXEC_VDF_TRAITS_H
15 #include <type_traits>
16 #include <unordered_map>
26 template <
typename,
typename =
void>
32 T, std::void_t<decltype(std::declval<T>() == std::declval<T>())>> =
true;
50 Vdf_IsEqualityComparableHelper<T>;
53 template <
class T,
class Allocator>
54 constexpr
bool VdfIsEqualityComparable<std::vector<T, Allocator>> =
55 VdfIsEqualityComparable<T>;
59 template <
class T1,
class T2>
60 constexpr
bool VdfIsEqualityComparable<std::pair<T1, T2>> =
61 VdfIsEqualityComparable<T1> && VdfIsEqualityComparable<T2>;
65 template <
class Key,
class T,
class Compare,
class Allocator>
67 std::map<Key, T, Compare, Allocator>> =
68 VdfIsEqualityComparable<Key> && VdfIsEqualityComparable<T>;
72 template <
class Key,
class T,
class Hash,
class KeyEqual,
class Allocator>
74 std::unordered_map<Key, T, Hash, KeyEqual, Allocator>> =
75 VdfIsEqualityComparable<Key> && VdfIsEqualityComparable<T>;
83 template <
typename,
bool>
103 template <
typename T>
105 std::is_pointer_v<T> ||
106 Vdf_AndTypeIsSmall<T, std::is_arithmetic_v<T>> ||
107 Vdf_AndTypeIsSmall<T, std::is_enum_v<T>>,
typename std::conditional< B, T, F >::type conditional_t
#define PXR_NAMESPACE_OPEN_SCOPE
PXR_NAMESPACE_OPEN_SCOPE constexpr bool Vdf_IsEqualityComparableHelper
constexpr bool Vdf_AndTypeIsSmall
constexpr bool VdfIsEqualityComparable
#define PXR_NAMESPACE_CLOSE_SCOPE
typename std::conditional_t< std::is_pointer_v< T >||Vdf_AndTypeIsSmall< T, std::is_arithmetic_v< T >>||Vdf_AndTypeIsSmall< T, std::is_enum_v< T >>, T, const T & > VdfByValueOrConstRef
constexpr bool Vdf_AndTypeIsSmall< T, true >