implementation details for template meta programming More...
implementation details for template meta programming
Typedefs | |
template<class ... Tuples> | |
using | ConCatTuples = decltype(std::tuple_cat(std::declval< Tuples >()...)) |
helper alias to concatenate multiple tuples More... | |
Functions | |
template<class P > | |
constexpr auto | isDefinedProperty (int) -> decltype(std::integral_constant< bool, !std::is_same< typename P::type, UndefinedProperty >::value >{}) |
check if a property P is defined More... | |
template<class P > | |
constexpr std::true_type | isDefinedProperty (...) |
fall back if a Property is defined More... | |
template<class T > | |
constexpr auto | hasParentTypeTag (int) -> decltype(std::declval< typename T::InheritsFrom >(), std::enable_if_t<!std::is_same< typename T::InheritsFrom, void >::value, int >{}, std::true_type{}) |
template<class T > | |
constexpr std::false_type | hasParentTypeTag (...) |
fall back if a TypeTag doesn't inherit More... | |
using Dumux::Properties::Detail::ConCatTuples = typedef decltype(std::tuple_cat(std::declval<Tuples>()...)) |
helper alias to concatenate multiple tuples
|
constexpr |
fall back if a TypeTag doesn't inherit
|
constexpr |
check if a TypeTag inherits from other TypeTags the enable_if portion of decltype is only needed for the macro hack to work, if no macros are in use anymore it can be removed, i.e. then trailing return type is then -> decltype(std::declval<typename T::InheritsFrom>(), std::true_type{})
|
constexpr |
fall back if a Property is defined
|
constexpr |
check if a property P is defined