forked from Alepha/Alepha
Conceptualize value_lens member support.
This commit is contained in:
@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user