16 #ifndef dealii_template_constraints_h 17 #define dealii_template_constraints_h 20 #include <deal.II/base/config.h> 22 #include <deal.II/base/complex_overloads.h> 27 DEAL_II_NAMESPACE_OPEN
31 namespace TemplateConstraints
34 template <
bool... Values>
42 template <
bool... Values>
45 static constexpr
bool value =
46 std::is_same<BoolStorage<Values...,
true>,
47 BoolStorage<
true, Values...>>::value;
58 template <
class Base,
class... Derived>
62 std::is_base_of<Base, Derived>::value...>::value;
73 template <
class Type,
class... Types>
77 std::is_same<Type, Types>::value...>::value;
87 template <
bool... Values>
89 : std::enable_if<internal::TemplateConstraints::all_true<Values...>::value>
94 template <
bool,
typename>
95 struct constraint_and_return_value;
173 template <
typename T>
174 struct DEAL_II_DEPRECATED constraint_and_return_value<true, T>
240 template <
typename T>
272 template <
typename T>
286 template <
typename T,
typename U>
413 template <
typename T,
typename U>
433 template <
typename T,
typename U>
436 using type = decltype(std::declval<T>() * std::declval<U>());
491 template <
typename T,
typename U>
496 typename std::decay<U>::type>::type;
506 template <
typename T>
509 using type = std::complex<T>;
512 template <
typename T,
typename U>
515 using type = std::complex<typename ProductType<T, U>::type>;
518 template <
typename U>
521 using type = std::complex<typename ProductType<double, U>::type>;
524 template <
typename T>
527 using type = std::complex<typename ProductType<T, double>::type>;
530 template <
typename U>
533 using type = std::complex<typename ProductType<float, U>::type>;
536 template <
typename T>
539 using type = std::complex<typename ProductType<T, float>::type>;
603 template <
typename T>
622 using type =
long double;
634 using type =
unsigned int;
637 template <
typename T>
640 using type = std::complex<T>;
644 DEAL_II_NAMESPACE_CLOSE
static bool equal(const T *, const U *)
static bool equal(const T *p1, const T *p2)