3 #ifndef DUNE_COMMON_CONCEPT_HH 4 #define DUNE_COMMON_CONCEPT_HH 48 template<
class... BaseConcepts>
65 template<
class C,
class... T>
82 template<
class C,
class... T,
83 decltype(std::declval<C>().require(std::declval<T>()...), 0) =0>
90 template<
class C,
class... T>
104 template<
class...T,
class C0,
class... CC>
106 {
return models<C0, T...>() and modelsConceptList<T...>(
TypeList<CC...>()); }
112 template<
class C,
class... T>
122 template<
class C,
class... T,
123 decltype(
typename C::BaseConceptList(), 0) = 0>
125 {
return matchesRequirement<C, T...>(
PriorityTag<42>()) and modelsConceptList<T...>(
typename C::BaseConceptList()); }
136 template<
class C,
class... T>
179 template<
class C,
class... T>
198 template<
class C,
class Tuple>
199 struct TupleEntriesModelHelper
201 template<
class Accumulated,
class T>
202 struct AccumulateFunctor
204 using type =
typename std::integral_constant<bool, Accumulated::value and models<C, T>()>;
219 template<
class C,
class Tuple>
221 ->
typename Impl::TupleEntriesModelHelper<C, Tuple>::Result
234 template<bool b, typename std::enable_if<b, int>::type = 0>
241 template<
class C,
class... T,
typename std::enable_if<
models<C, T...>(),
int>::type = 0>
249 template<
class C,
class... T,
typename std::enable_if<
models<C, T...>(),
int>::type = 0>
257 template<
class C,
class Tuple,
typename std::enable_if<tupleEntriesModel<C, Tuple>(),
int>::type = 0>
265 template<
class From,
class To,
266 typename std::enable_if< std::is_convertible<From, To>::value,
int>::type = 0>
274 template<
class To,
class From,
275 typename std::enable_if< std::is_convertible<From, To>::value,
int>::type = 0>
293 template<
class Base,
class Derived,
294 typename std::enable_if< std::is_base_of<Base, Derived>::value,
int>::type = 0>
302 template<
class Base,
class Derived,
303 typename std::enable_if< std::is_base_of<Base, Derived>::value,
int>::type = 0>
311 template<
class A,
class B,
312 typename std::enable_if< std::is_same<A, B>::value,
int>::type = 0>
329 #endif // DUNE_COMMON_CONCEPT_HH constexpr bool requireConceptForTupleEntries()
Definition: concept.hh:258
constexpr auto tupleEntriesModel() -> typename Impl::TupleEntriesModelHelper< C, Tuple >::Result
Definition: concept.hh:220
Utilities for type computations, constraining overloads, ...
Contains utility classes which can be used with std::tuple.
std::tuple< MetaType< T >... > TypeList
A simple type list.
Definition: typelist.hh:85
constexpr auto models()
Check if concept is modeled by given types.
Definition: concept.hh:180
std::integral_constant< bool, value > bool_constant
A template alias for std::integral_constant<bool, value>
Definition: type_traits.hh:118
constexpr bool requireSameType()
Definition: concept.hh:313
constexpr bool requireType()
Definition: concept.hh:286
Helper class for tagging priorities.
Definition: typeutilities.hh:82
Dune namespace.
Definition: alignedallocator.hh:9
constexpr bool requireBaseOf()
Definition: concept.hh:295
Base class for refined concepts.
Definition: concept.hh:49
constexpr bool requireTrue()
Definition: concept.hh:235
F< Accumulated, Value >::type type
Result of the reduce operation.
Definition: tupleutility.hh:539
constexpr bool requireConvertible()
Definition: concept.hh:267
Helper class for tagging priorities.
Definition: typeutilities.hh:70
constexpr bool requireConcept()
Definition: concept.hh:242
TypeList< BaseConcepts... > BaseConceptList
Definition: concept.hh:51