From cb3079ca9e572971bfcaa84184440e2b9c4d2839 Mon Sep 17 00:00:00 2001 From: ADAM David Alan Martin Date: Thu, 28 Aug 2025 00:31:18 -0400 Subject: [PATCH] Conceptualize free `strict_weak_order_lens`. --- comparisons.h | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/comparisons.h b/comparisons.h index 9e41f05..2f80cd2 100644 --- a/comparisons.h +++ b/comparisons.h @@ -172,20 +172,21 @@ namespace Alepha::Hydrogen return value_lens( t ); } - template< typename T, typename= void > - struct supports_strict_weak_order_lens : std::false_type {}; - template< typename T > - struct supports_strict_weak_order_lens< T, std::void_t< decltype( strict_weak_order_lens( std::declval< const T & >() ) ) > > : std::true_type {}; + concept StrictWeakOrderLensed= + LensComparable< T > + and + requires( const T &val ) + { + { strict_weak_order_lens( val ) } -> Concepts::LessThanComparable; + }; - template< typename T > - constexpr bool supports_strict_weak_order_lens_v= supports_strict_weak_order_lens< T >::value; template< typename T > constexpr decltype( auto ) make_strict_weak_order_lens( T &t ) { - if constexpr( supports_strict_weak_order_lens_v< T > ) return strict_weak_order_lens( t ); + if constexpr( StrictWeakOrderLensed< T > ) return strict_weak_order_lens( t ); //else if constexpr( supports_default_lens_v< T > ) return default_lens( t ); else static_assert( Meta::dep_value< false, T > ); }