From 0ba1ea988abb782cada22e22a7f0f5d22538cfdc Mon Sep 17 00:00:00 2001 From: ADAM David Alan Martin Date: Thu, 28 Aug 2025 00:26:54 -0400 Subject: [PATCH] Conceptualize member `strict_weak_order_lens`. --- comparisons.h | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/comparisons.h b/comparisons.h index f939c2d..9e41f05 100644 --- a/comparisons.h +++ b/comparisons.h @@ -151,23 +151,17 @@ namespace Alepha::Hydrogen // Strict weak order lens support - template< typename T, typename= void > - struct has_strict_weak_order_lens_member : std::false_type {}; - template< typename T > - struct has_strict_weak_order_lens_member< T, std::void_t< decltype( std::declval< const T & >().strict_weak_order_lens() ) > > : std::true_type {}; + concept MemberStrictWeakOrderLensed= + LensComparable< T > + and + requires( const T &val ) + { + { val.strict_weak_order_lens() } -> Concepts::LessThanComparable; + }; - template< typename T > - constexpr bool has_strict_weak_order_lens_member_v= has_strict_weak_order_lens_member< T >::value; - - template - < - LensComparable T, - typename= std::enable_if_t< has_strict_weak_order_lens_member_v< T > >, - overload< __LINE__ > = nullptr - > constexpr decltype( auto ) - strict_weak_order_lens( T &t ) + strict_weak_order_lens( const MemberStrictWeakOrderLensed auto &t ) { return t.strict_weak_order_lens(); }