5#ifndef DUNE_COMMON_STD_TYPE_TRAITS_HH
6#define DUNE_COMMON_STD_TYPE_TRAITS_HH
12#if __has_include(<experimental/type_traits>)
13#include <experimental/type_traits>
34 using std::bool_constant;
36#if DUNE_HAVE_CXX_EXPERIMENTAL_IS_DETECTED
38 using std::experimental::nonesuch;
39 using std::experimental::detected_or;
40 using std::experimental::is_detected;
41 using std::experimental::detected_t;
42 using std::experimental::is_detected_v;
43 using std::experimental::detected_or_t;
44 using std::experimental::is_detected_exact;
45 using std::experimental::is_detected_exact_v;
46 using std::experimental::is_detected_convertible;
47 using std::experimental::is_detected_convertible_v;
59 template<
typename Default,
typename Void,
template<
typename...>
class Op,
typename... Args>
62 using value_t = std::false_type;
67 template<
typename Default,
template<
typename...>
class Op,
typename... Args>
68 struct detector<Default,
std::
void_t<Op<Args...>>, Op, Args...>
70 using value_t = std::true_type;
71 using type = Op<Args...>;
127 template<
typename Default,
template<
typename...>
class Op,
typename... Args>
140 template<
template<
typename...>
class Op,
typename... Args>
143#ifdef __cpp_variable_templates
154 template<
template<
typename...>
class Op,
typename... Args>
169 template<
template<
typename...>
class Op,
typename... Args>
184 template<
typename Default,
template<
typename...>
class Op,
typename... Args>
194 template<
typename Expected,
template<
typename...>
class Op,
typename... Args>
197#ifdef __cpp_variable_templates
205 template<
typename Expected,
template<
typename...>
class Op,
typename... Args>
216 template<
typename Target,
template<
typename...>
class Op,
typename... Args>
219#ifdef __cpp_variable_templates
227 template<
typename Target,
template<
typename...>
class Op,
typename... Args>
245 template<
class... B >
246 struct [[deprecated(
"Will be removed after release 2.8. Use std::conjunction instead.")]]
conjunction
247 : std::conjunction<B...>
261 template<
class... B >
262 struct [[deprecated(
"Will be removed after release 2.8. Use std::disjunction instead.")]]
disjunction
263 : std::disjunction<B...>
278 struct [[deprecated(
"Will be removed after release 2.8. Use std::negation instead.")]]
negation
287 template <
class Type>
288 [[deprecated(
"Type extraction of `TargetType` has failed. Inspect the code calling `detected_or_fallback_t` for getting the source of this warning!")]]
291 template <
class Type,
class T>
292 Type warningIfNotDefined(
const T*);
296template <
template<
typename...>
class Fallback,
297 template<
typename...>
class TargetType,
typename... Args>
300 TargetType, Args...>;
Traits for type conversions and type information.
Utilities for type computations, constraining overloads, ...
constexpr bool is_detected_exact_v
Convenient access to the result value of is_detected_exact.
Definition type_traits.hh:206
constexpr bool is_detected_convertible_v
Convenient access to the result value of is_detected_convertible.
Definition type_traits.hh:228
typename detected_or< Default, Op, Args... >::type detected_or_t
Returns Op<Args...> if that is valid; otherwise returns the fallback type Default.
Definition type_traits.hh:185
std::is_same< Expected, detected_t< Op, Args... > > is_detected_exact
Checks whether Op<Args...> is Expected without causing an error if Op<Args...> is invalid.
Definition type_traits.hh:195
typename detected_or< nonesuch, Op, Args... >::type detected_t
Returns Op<Args...> if that is valid; otherwise returns nonesuch.
Definition type_traits.hh:170
typename Impl::voider< Types... >::type void_t
Is void for all valid input types. The workhorse for C++11 SFINAE-techniques.
Definition typetraits.hh:40
constexpr bool is_detected_v
Detects whether Op<Args...> is valid and makes the result available as a value.
Definition type_traits.hh:155
typename detected_or< nonesuch, Op, Args... >::value_t is_detected
Detects whether Op<Args...> is valid.
Definition type_traits.hh:141
Impl::detector< Default, void, Op, Args... > detected_or
Detects whether Op<Args...> is valid and makes the result available.
Definition type_traits.hh:128
std::is_convertible< Target, detected_t< Op, Args... > > is_detected_convertible
Checks whether Op<Args...> is convertible to Target without causing an error if Op<Args....
Definition type_traits.hh:217
Dune namespace.
Definition alignedallocator.hh:13
Std::detected_or_t< decltype(detail::warningIfNotDefined< Std::detected_t< Fallback, Args... > >(std::declval< const Std::detected_t< TargetType, Args... > * >())), TargetType, Args... > detected_or_fallback_t
This type will be either TargetType<Args...> if it exists, or the Fallback<Args......
Definition type_traits.hh:300
Type representing a lookup failure by std::detected_or and friends.
Definition type_traits.hh:88
nonesuch(const nonesuch &)=delete
void operator=(const nonesuch &)=delete
forms the logical conjunction of the type traits B...
Definition type_traits.hh:248
forms the logical disjunction of the type traits B...
Definition type_traits.hh:264
forms the logical negation of the type traits B...
Definition type_traits.hh:280