@@ -27,7 +27,8 @@ namespace mem {
2727
2828namespace detail {
2929
30- IPC_CONCEPT_ (is_comparable, operator <(std::declval<Type>()));
30+ template <typename T>
31+ IPC_CONCEPT_ (is_comparable, require<const T>([](auto && t)->decltype (t < t) {}));
3132
3233} // namespace detail
3334
@@ -71,8 +72,10 @@ class limited_recycler<AllocP, true> {
7172template <typename AllocP>
7273class default_recycler : public limited_recycler <AllocP> {
7374
74- IPC_CONCEPT_ (has_remain, remain());
75- IPC_CONCEPT_ (has_empty , empty());
75+ template <typename T>
76+ IPC_CONCEPT_ (has_remain, require<const T>([](auto && t)->decltype (t.remain()) {}));
77+ template <typename T>
78+ IPC_CONCEPT_ (has_empty, require<const T>([](auto && t)->decltype (t.empty()) {}));
7679
7780 template <typename A>
7881 void try_fill (A & alc) {
@@ -86,28 +89,28 @@ class default_recycler : public limited_recycler<AllocP> {
8689
8790 template <typename A = AllocP>
8891 auto try_replenish (alloc_policy & alc, std::size_t size)
89- -> ipc::require <detail::has_take<A>::value && has_remain<A>::value> {
92+ -> std::enable_if_t <detail::has_take<A>::value && has_remain<A>::value> {
9093 if (alc.remain () >= size) return ;
9194 this ->try_fill (alc);
9295 }
9396
9497 template <typename A = AllocP>
9598 auto try_replenish (alloc_policy & alc, std::size_t /* size*/ )
96- -> ipc::require <detail::has_take<A>::value && !has_remain<A>::value && has_empty<A>::value> {
99+ -> std::enable_if_t <detail::has_take<A>::value && !has_remain<A>::value && has_empty<A>::value> {
97100 if (!alc.empty ()) return ;
98101 this ->try_fill (alc);
99102 }
100103
101104 template <typename A = AllocP>
102105 auto try_replenish (alloc_policy & alc, std::size_t /* size*/ )
103- -> ipc::require <!detail::has_take<A>::value && has_empty<A>::value> {
106+ -> std::enable_if_t <!detail::has_take<A>::value && has_empty<A>::value> {
104107 if (!alc.empty ()) return ;
105108 this ->try_recover (alc);
106109 }
107110
108111 template <typename A = AllocP>
109112 IPC_CONSTEXPR_ auto try_replenish (alloc_policy & /* alc*/ , std::size_t /* size*/ ) noexcept
110- -> ipc::require <(!detail::has_take<A>::value || !has_remain<A>::value) && !has_empty<A>::value> {
113+ -> std::enable_if_t <(!detail::has_take<A>::value || !has_remain<A>::value) && !has_empty<A>::value> {
111114 // Do Nothing.
112115 }
113116};
0 commit comments