@@ -19,7 +19,9 @@ struct get_allocator_t {
1919 auto operator ()(Object&&) const =
2020 BEMAN_EXECUTION26_DELETE(" the object requires a const query(get_allocator_t) overload" );
2121 template <typename Object>
22- requires (not requires (const Object& object, const get_allocator_t & tag) { object.query (tag); })
22+ requires (
23+ not requires (const Object& object, const get_allocator_t & tag) { object.query (tag); } &&
24+ not requires (Object&& object, const get_allocator_t & tag) { ::std::as_const (object).query (tag); })
2325 auto
2426 operator ()(Object&&) const = BEMAN_EXECUTION26_DELETE(" the object requires a query(get_allocator_t) overload" );
2527 template <typename Object>
@@ -28,6 +30,7 @@ struct get_allocator_t {
2830 })
2931 auto
3032 operator ()(Object&&) const = BEMAN_EXECUTION26_DELETE(" the query(get_allocator_t) overload needs to be noexcept" );
33+
3134 template <typename Object>
3235 requires (not requires (const Object& object, const get_allocator_t & tag) {
3336 { object.query (tag) } noexcept -> ::beman::execution26::detail::simple_allocator<>;
@@ -36,7 +39,10 @@ struct get_allocator_t {
3639 operator ()(Object&&) const = BEMAN_EXECUTION26_DELETE(" the query(get_allocator_t) overload needs to be noexcept" );
3740
3841 template <typename Object>
39- auto operator ()(Object&& object) const {
42+ requires (requires (const Object& object, const get_allocator_t & tag) {
43+ { object.query (tag) } noexcept -> ::beman::execution26::detail::simple_allocator<>;
44+ })
45+ auto operator ()(Object&& object) const noexcept {
4046 return ::std::as_const (object).query (*this );
4147 }
4248
0 commit comments