From 9b42ad06de9e2a3a2fa56b12ef15d97f0f32ea5f Mon Sep 17 00:00:00 2001 From: ADAM David Alan Martin Date: Thu, 28 Aug 2025 00:14:35 -0400 Subject: [PATCH] Conceptualize `value_lens` member support. --- comparisons.h | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/comparisons.h b/comparisons.h index 09b4a82..b4ded81 100644 --- a/comparisons.h +++ b/comparisons.h @@ -77,23 +77,17 @@ namespace Alepha::Hydrogen // Value lens support - template< typename T, typename= void > - struct has_value_lens_member : std::false_type {}; - template< typename T > - struct has_value_lens_member< T, std::void_t< decltype( std::declval< const T & >().value_lens() ) > > : std::true_type {}; + concept MemberValueLensed= + Comparable< T > + and + requires( const T &val ) + { + { val.value_lens() } -> Concepts::Comparable; + }; - template< typename T > - constexpr bool has_value_lens_member_v= has_value_lens_member< T >::value; - - template - < - Comparable T, - typename= std::enable_if_t< has_value_lens_member_v< T > >, - overload< __LINE__ > = nullptr - > constexpr decltype( auto ) - value_lens( T &t ) + value_lens( const MemberValueLensed auto &t ) { return t.value_lens(); }