3 #ifndef DUNE_COMMON_STD_TYPE_TRAITS_HH
4 #define DUNE_COMMON_STD_TYPE_TRAITS_HH
10 #if __has_include(<experimental/type_traits>)
11 #include <experimental/type_traits>
78 template<
typename T >
79 struct [[deprecated("Will be removed after release 2.8. Use
Dune::
AlwaysFalse (from dune/common/typetraits.hh)")]]
to_false_type :
public std::false_type {};
96 template<
typename T >
97 struct [[deprecated("Will be removed after release 2.8. Use
Dune::
AlwaysTrue (from dune/common/typetraits.hh)")]]
to_true_type :
public std::true_type {};
102 using std::bool_constant;
110 template<
class R,
class F,
class... Args,
112 std::is_same<
std::void_t<std::result_of_t<F(Args...)>>, R>::value
120 template<
class R,
class F,
class... Args,
122 std::is_convertible<std::result_of_t<F(Args...)>, R>::value
124 std::true_type is_callable_helper(PriorityTag<1>)
130 template<
class R,
class F,
class... Args>
131 std::false_type is_callable_helper(PriorityTag<0>)
153 template <
class D,
class R=
void>
174 template <
class F,
class... Args,
class R>
175 struct [[deprecated("Use std::
is_invocable from <type_traits>. Will be removed after release 2.8")]]
is_callable< F(Args...), R> :
176 decltype(Impl::is_callable_helper<R, F, Args...>(PriorityTag<42>()))
194 template <
class F,
class... Args>
196 decltype(Impl::is_callable_helper<void, F, Args...>(PriorityTag<42>()))
215 template <
class R,
class F,
class... Args>
217 decltype(Impl::is_callable_helper<R, F, Args...>(PriorityTag<42>()))
221 #if DUNE_HAVE_CXX_EXPERIMENTAL_IS_DETECTED
223 using std::experimental::nonesuch;
244 template<
typename Default,
typename Void,
template<
typename...>
class Op,
typename... Args>
247 using value_t = std::false_type;
248 using type = Default;
252 template<
typename Default,
template<
typename...>
class Op,
typename... Args>
253 struct detector<Default, std::
void_t<Op<Args...>>, Op, Args...>
255 using value_t = std::true_type;
256 using type = Op<Args...>;
312 template<
typename Default,
template<
typename...>
class Op,
typename... Args>
325 template<
template<
typename...>
class Op,
typename... Args>
328 #ifdef __cpp_variable_templates
339 template<
template<
typename...>
class Op,
typename... Args>
354 template<
template<
typename...>
class Op,
typename... Args>
369 template<
typename Default,
template<
typename...>
class Op,
typename... Args>
379 template<
typename Expected,
template<
typename...>
class Op,
typename... Args>
382 #ifdef __cpp_variable_templates
390 template<
typename Expected,
template<
typename...>
class Op,
typename... Args>
401 template<
typename Target,
template<
typename...>
class Op,
typename... Args>
404 #ifdef __cpp_variable_templates
412 template<
typename Target,
template<
typename...>
class Op,
typename... Args>
430 template<
class... B >
431 struct [[deprecated("Will be removed after release 2.8. Use std::conjuction instead.")]]
conjunction
432 : std::conjunction<B...>
446 template<
class... B >
448 : std::disjunction<B...>
463 struct [[deprecated("Will be removed after release 2.8. Use std::
negation instead.")]]
negation
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:391
constexpr bool is_detected_convertible_v
Convenient access to the result value of is_detected_convertible.
Definition: type_traits.hh:413
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:370
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:380
typename detected_or< nonesuch, Op, Args... >::type detected_t
Returns Op<Args...> if that is valid; otherwise returns nonesuch.
Definition: type_traits.hh:355
typename Impl::voider< Types... >::type void_t
Is void for all valid input types. The workhorse for C++11 SFINAE-techniques.
Definition: typetraits.hh:38
constexpr bool is_detected_v
Detects whether Op<Args...> is valid and makes the result available as a value.
Definition: type_traits.hh:340
typename detected_or< nonesuch, Op, Args... >::value_t is_detected
Detects whether Op<Args...> is valid.
Definition: type_traits.hh:326
Impl::detector< Default, void, Op, Args... > detected_or
Detects whether Op<Args...> is valid and makes the result available.
Definition: type_traits.hh:313
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:402
Dune namespace.
Definition: alignedallocator.hh:11
template mapping a type to std::false_type
Definition: type_traits.hh:79
template mapping a type to std::true_type
Definition: type_traits.hh:97
Traits class to check if function is callable.
Definition: type_traits.hh:154
Traits class to check if function is invocable.
Definition: type_traits.hh:197
Traits class to check if function is invocable and the return type is compatible.
Definition: type_traits.hh:218
Type representing a lookup failure by std::detected_or and friends.
Definition: type_traits.hh:273
nonesuch(const nonesuch &)=delete
void operator=(const nonesuch &)=delete
forms the logical conjunction of the type traits B...
Definition: type_traits.hh:433
forms the logical disjunction of the type traits B...
Definition: type_traits.hh:449
forms the logical negation of the type traits B...
Definition: type_traits.hh:465
template which always yields a false value
Definition: typetraits.hh:124
template which always yields a true value
Definition: typetraits.hh:134
Helper class for tagging priorities.
Definition: typeutilities.hh:71