13 template<
typename TInterface,
typename TBase>
19 template<
typename TInterface,
typename TDerived>
22 template<
typename TBase>
32 template<
typename TInterface,
typename TDerived,
typename Sfinae =
void>
36 template<
typename TInterface,
typename TDerived>
40 std::enable_if_t<!ImplementsInterface<TInterface, TDerived>::value>>
47 template<
typename TInterface,
typename TDerived>
51 std::enable_if_t<ImplementsInterface<TInterface, TDerived>::value>>
53 template<
typename TBase>
56 using type = decltype(implementer(std::declval<TDerived&>()));
59 std::is_base_of_v<type, TDerived>,
60 "The type implementing the interface has to be a publicly accessible base class!");
65 template<
typename TInterface,
typename TDerived>
typename detail::ImplementationBaseType< TInterface, TDerived >::type ImplementationBase
Returns the type that implements the given interface in the inheritance hierarchy.
Checks whether the interface is implemented by the given class.
static auto implements(Implements< TInterface, TBase > &) -> std::true_type
static auto implements(...) -> std::false_type
static constexpr auto value
Tag used in class inheritance hierarchies that describes that a specific interface (TInterface) is im...
decltype(implementer(std::declval< TDerived & >())) type
static auto implementer(Implements< TInterface, TBase > &) -> TBase
Returns the type that implements the given interface in the inheritance hierarchy.