3.4
DUNE for Multi-{Phase, Component, Scale, Physics, ...} flow and transport in porous media
Classes | Typedefs | Functions
Dumux::Properties::Detail Namespace Reference

implementation details for template meta programming More...

Description

implementation details for template meta programming

Classes

struct  GetDefined
 helper struct to get the first property that is defined in the TypeTag hierarchy More...
 
struct  GetDefined< TypeTag, Property, std::tuple< FirstTypeTag, Args... > >
 
struct  GetDefined< TypeTag, Property, std::tuple< LastTypeTag > >
 
struct  GetNextTypeTag
 helper struct to iteratre over the TypeTag hierarchy More...
 
struct  GetNextTypeTag< TypeTag, Property, std::tuple< FirstTypeTag, Args... >, std::enable_if_t< hasParentTypeTag< FirstTypeTag >(int{}), void > >
 
struct  GetNextTypeTag< TypeTag, Property, std::tuple< FirstTypeTag, Args... >, std::enable_if_t<!hasParentTypeTag< FirstTypeTag >(int{}), void > >
 
struct  GetNextTypeTag< TypeTag, Property, std::tuple< LastTypeTag >, std::enable_if_t< hasParentTypeTag< LastTypeTag >(int{}), void > >
 
struct  GetNextTypeTag< TypeTag, Property, std::tuple< LastTypeTag >, std::enable_if_t<!hasParentTypeTag< LastTypeTag >(int{}), void > >
 
struct  GetPropImpl
 helper struct to extract get the Property specilization given a TypeTag, asserts that the property is defined More...
 

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_v< typename P::type, UndefinedProperty > >{})
 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::true_type{})
 check if a TypeTag inherits from other TypeTags More...
 
template<class T >
constexpr std::false_type hasParentTypeTag (...)
 fall back if a TypeTag doesn't inherit More...
 

Typedef Documentation

◆ ConCatTuples

template<class ... Tuples>
using Dumux::Properties::Detail::ConCatTuples = typedef decltype(std::tuple_cat(std::declval<Tuples>()...))

helper alias to concatenate multiple tuples

Function Documentation

◆ hasParentTypeTag() [1/2]

template<class T >
constexpr std::false_type Dumux::Properties::Detail::hasParentTypeTag (   ...)
constexpr

fall back if a TypeTag doesn't inherit

◆ hasParentTypeTag() [2/2]

template<class T >
constexpr auto Dumux::Properties::Detail::hasParentTypeTag ( int  ) -> decltype(std::declval<typename T::InheritsFrom>(), std::true_type{})
constexpr

check if a TypeTag inherits from other TypeTags

◆ isDefinedProperty() [1/2]

template<class P >
constexpr std::true_type Dumux::Properties::Detail::isDefinedProperty (   ...)
constexpr

fall back if a Property is defined

◆ isDefinedProperty() [2/2]

template<class P >
constexpr auto Dumux::Properties::Detail::isDefinedProperty ( int  ) -> decltype(std::integral_constant<bool, !std::is_same_v<typename P::type, UndefinedProperty>>{})
constexpr

check if a property P is defined