From b4438d46d6eb2ac518ef21340c987ed167fc9034 Mon Sep 17 00:00:00 2001 From: ADAM David Alan Martin Date: Sun, 22 Oct 2023 04:42:50 -0400 Subject: [PATCH] This implementation of capabilities is a bit quirky... this helps check things. --- Capabilities.h | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/Capabilities.h b/Capabilities.h index c3003c4..b926c10 100644 --- a/Capabilities.h +++ b/Capabilities.h @@ -94,7 +94,7 @@ namespace Alepha::Hydrogen } template< typename Cap, template< typename ... > class Class, typename ... TParams > - constexpr bool + consteval bool has_cap( const Meta::type_value< Class< TParams... > > &, Meta::type_value< Cap > cap ) { return has_cap( Meta::Container::vector< TParams... >{}, cap ); @@ -112,7 +112,19 @@ namespace Alepha::Hydrogen struct has_capability_s : std::bool_constant< has_capability_v< T, cap > > {}; inline constexpr Meta::trait< has_capability_s > has_capability; + + template< typename T, typename capability > + concept Capability= has_capability_v< T, capability >; } + + struct capability_demo {}; + struct missing_capability_demo {}; + template< typename= Capabilities< capability_demo > > + struct Capable_base {}; + using Capable= Capable_base<>; + static_assert( Capability< Capable, capability_demo > == true ); + static_assert( Capability< Capable, missing_capability_demo > == false ); + template< Capability< missing_capability_demo > C > void f( C ) {} } namespace exports::capabilities