Utilities - EnableForHierarchy< T1 , T2 >
Templated horror that corresponds to a std::enable_if for which the condition will be true if T1 and T2 are in the same type hierarchy.
This commit is contained in:
parent
5f3911a067
commit
b916df3b62
1 changed files with 21 additions and 4 deletions
|
@ -136,8 +136,7 @@ template< typename... List >
|
|||
template<
|
||||
typename Parent ,
|
||||
typename Child
|
||||
>
|
||||
using EnableForChild =
|
||||
> using EnableForChild =
|
||||
std::enable_if<
|
||||
std::is_base_of< Parent , Child >::value ,
|
||||
bool
|
||||
|
@ -151,8 +150,7 @@ using T_EnableForChild = typename EnableForChild<C, P>::type;
|
|||
template<
|
||||
typename Child ,
|
||||
typename Parent
|
||||
>
|
||||
using EnableForParent =
|
||||
> using EnableForParent =
|
||||
std::enable_if<
|
||||
std::is_base_of< Parent , Child >::value
|
||||
&& !std::is_same< Parent , Child >::value ,
|
||||
|
@ -162,6 +160,25 @@ using EnableForParent =
|
|||
template< typename C , typename P >
|
||||
using T_EnableForParent = typename EnableForParent<C, P>::type;
|
||||
|
||||
// EnableForHierarchy< T1 , T2 > - Enable if T1 and T2 are the same, or if
|
||||
// T1 is the child of T2 or if T2 is the child of T1
|
||||
template<
|
||||
typename T1 ,
|
||||
typename T2
|
||||
> using EnableForHierarchy =
|
||||
std::enable_if< MetaOr<
|
||||
std::is_same< T1 , T2 > ,
|
||||
std::is_base_of< T1 , T2 > ,
|
||||
std::is_base_of< T2 , T1 >
|
||||
>::value ,
|
||||
bool
|
||||
>;
|
||||
|
||||
template<
|
||||
typename T1 ,
|
||||
typename T2
|
||||
> using T_EnableForHierarchy = typename EnableForHierarchy< T1 , T2 >::type;
|
||||
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
// Remove const and topmost reference
|
||||
|
|
Loading…
Reference in a new issue