1
0
forked from Alepha/Alepha

Conceptualize member spaceship lens.

This commit is contained in:
2025-08-28 00:21:41 -04:00
parent a2f83abeb6
commit bd1de0bba4

View File

@ -34,23 +34,17 @@ namespace Alepha::Hydrogen
// Spaceship lens support
template< typename T, typename= void >
struct has_spaceship_lens_member : std::false_type {};
template< typename T >
struct has_spaceship_lens_member< T, std::void_t< decltype( std::declval< const T & >().spaceship_lens() ) > > : std::true_type {};
concept MemberSpaceshipLensed=
LensComparable< T >
and
requires( const T &lhs, const T &rhs )
{
{ lhs.spaceship_lens() <=> rhs.spaceship_lens() } -> SameAs< std::strong_ordering >;
};
template< typename T >
constexpr bool has_spaceship_lens_member_v= has_spaceship_lens_member< T >::value;
template
<
LensComparable T,
typename= std::enable_if_t< has_spaceship_lens_member_v< T > >,
overload< __LINE__ > = nullptr
>
constexpr decltype( auto )
spaceship_lens( T &t )
spaceship_lens( const MemberSpaceshipLensed auto &t )
{
return t.spaceship_lens();
}