23#ifndef ATHENAKERNEL_BASES_H
24#define ATHENAKERNEL_BASES_H
93 template <
class CALLABLE>
98 using return_t =
decltype (f (
static_cast<void*
> (
nullptr),
false));
99 return return_t (
false);
124template <
class BASE,
class... REST>
185 template <
class CALLABLE>
187 auto foreach_ (CALLABLE f,
bool is_virtual =
false)
194 auto ret1 = f (
static_cast<base_t*
> (
nullptr), base_is_virtual);
195 if (
static_cast<bool> (ret1)) {
201 if (
static_cast<bool> (ret2)) {
206 if constexpr (
sizeof... (REST) > 0) {
208 if (
static_cast<bool> (ret3)) {
214 using return_t =
decltype (ret1);
215 return return_t (
false);
typename SG::BaseType< T >::type BaseType_t
static auto foreach_(CALLABLE f, bool is_virtual=false)
Iterate over base classes.
Represent a list of base classes.
static auto foreach_(CALLABLE f, bool=false)
Iterate over base classes.
std::true_type is_virtual
Helper metafunction to get base class types.
std::false_type is_virtual
Traits class to hold derivation information.
Marker to indicate a nonexistent base class.
Wrapper to indicate virtual derivation.