15#ifndef dealii_template_constraints_h
16#define dealii_template_constraints_h
40 namespace SupportsOperation
51 template <
class Default,
74 template <
class Default,
template <
class...>
class Op,
class... Args>
101 template <
class Default,
template <
class...>
class Op,
class... Args>
104 template <
template <
class...>
class Op,
class... Args>
107 template <
template <
class...>
class Op,
class... Args>
110 template <
class Default,
template <
class...>
class Op,
class... Args>
113 template <
class Expected,
template <
class...>
class Op,
class... Args>
116 template <
class To,
template <
class...>
class Op,
class... Args>
118 std::is_convertible<
detected_t<Op, Args...>, To>;
156 template <
template <
class...>
class Op,
class... Args>
165 namespace TemplateConstraints
175 template <
bool... Values>
178 static constexpr bool value = (Values && ...);
186 template <
bool... Values>
189 static constexpr bool value = (Values || ...);
200template <
class Base,
class... Derived>
204 std::is_base_of_v<Base, Derived>...>
::value;
215template <
typename Type,
class... Types>
219 std::is_same_v<Type, Types>...>
::value;
230template <
typename Type,
class... Types>
234 std::is_same_v<Type, Types>...>
::value;
264template <
bool... Values>
266 : std::enable_if<internal::TemplateConstraints::all_true<Values...>::value>
296template <
bool... Values>
307 decltype(std::begin(std::declval<T>()), std::end(std::declval<T>()));
330template <
typename ArgType,
typename ValueType>
365 template <
typename T>
379 template <
typename T,
typename U>
401 template <
typename T,
typename U>
404 using type =
decltype(std::declval<T>() * std::declval<U>());
457template <
typename T,
typename U>
471 template <
typename T>
477 template <
typename T,
typename U>
480 using type = std::complex<typename ProductType<T, U>::type>;
483 template <
typename U>
486 using type = std::complex<typename ProductType<double, U>::type>;
489 template <
typename T>
492 using type = std::complex<typename ProductType<T, double>::type>;
495 template <
typename U>
498 using type = std::complex<typename ProductType<float, U>::type>;
501 template <
typename T>
504 using type = std::complex<typename ProductType<T, float>::type>;
608template <
typename Number>
611template <
typename Number>
616 template <
typename Number>
619 template <
typename Number>
622 namespace distributed
624 template <
typename Number,
typename MemorySpace>
627 template <
typename Number>
632#ifdef DEAL_II_WITH_PETSC
650#ifdef DEAL_II_WITH_TRILINOS
662 namespace EpetraWrappers
667# ifdef DEAL_II_TRILINOS_WITH_TPETRA
668 namespace TpetraWrappers
670 template <
typename Number,
typename MemorySpace>
673 template <
typename Number,
typename MemorySpace>
688#if defined(DEAL_II_HAVE_CXX20) || defined(DOXYGEN)
699 template <
typename C>
719 template <
int dim,
int spacedim>
721 (dim >= 1 && spacedim <= 3 && dim <= spacedim);
731 template <
typename T>
734 template <
typename Number>
737 template <
typename Number>
741 template <
typename Number>
742 inline constexpr bool
745 template <
typename Number,
typename MemorySpace>
749 template <
typename Number>
753# ifdef DEAL_II_WITH_PETSC
759 inline constexpr bool
763 inline constexpr bool
767 inline constexpr bool
771# ifdef DEAL_II_WITH_TRILINOS
773 inline constexpr bool
777 inline constexpr bool
781 inline constexpr bool
785# ifdef DEAL_II_TRILINOS_WITH_TPETRA
786 template <
typename Number,
typename MemorySpace>
801 template <
typename T>
804# ifdef DEAL_II_WITH_PETSC
806 inline constexpr bool
810 inline constexpr bool
814 inline constexpr bool
818 inline constexpr bool
822 inline constexpr bool
835 template <
typename T>
838# ifdef DEAL_II_WITH_PETSC
840 inline constexpr bool
862 template <
typename VectorType>
875 template <
typename VectorType>
887 template <
typename VectorType>
899 template <
typename VectorType>
906template <
int dim,
int spacedim>
910template <
int dim,
int spacedim>
916 namespace distributed
918 template <
int dim,
int spacedim>
924 template <
int dim,
int spacedim>
928 namespace fullydistributed
930 template <
int dim,
int spacedim>
938#if defined(DEAL_II_HAVE_CXX20) || defined(DOXYGEN)
941 template <
typename T>
944 template <
int dim,
int spacedim>
945 inline constexpr bool
948 template <
int dim,
int spacedim>
952 template <
int dim,
int spacedim>
956 template <
int dim,
int spacedim>
960 template <
int dim,
int spacedim>
961 inline constexpr bool
973 template <
typename MeshType>
983 template <
typename VectorType>
987 typename VectorType::value_type a,
988 typename VectorType::value_type b,
989 typename VectorType::value_type s) {
991 typename VectorType::value_type;
992 typename VectorType::size_type;
993 typename VectorType::real_type;
1023 } -> std::convertible_to<typename VectorType::value_type>;
1027 } -> std::convertible_to<typename VectorType::real_type>;
1031 } -> std::convertible_to<typename VectorType::real_type>;
1035 } -> std::convertible_to<typename VectorType::real_type>;
1040 } -> std::convertible_to<typename VectorType::value_type>;
1043 U.add_and_dot(a, V, W)
1044 } -> std::convertible_to<typename VectorType::value_type>;
1049 } -> std::convertible_to<typename VectorType::size_type>;
1053 } -> std::same_as<bool>;
1065 template <
typename MatrixType,
typename VectorType>
1067 requires(
const MatrixType &A, VectorType &dst,
const VectorType &src) {
1080 template <
typename MatrixType,
typename VectorType>
1082 requires(
const MatrixType &A, VectorType &dst,
const VectorType &src) {
#define DEAL_II_DEPRECATED
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_CXX20_REQUIRES(condition)
#define DEAL_II_NAMESPACE_CLOSE
constexpr bool is_dealii_petsc_matrix_type
constexpr bool is_triangulation_or_dof_handler
constexpr bool is_dealii_vector_type
constexpr bool is_dealii_petsc_vector_type
std::is_same< Expected, detected_t< Op, Args... > > is_detected_exact
typename detected_or< nonesuch, Op, Args... >::type detected_t
typename detected_or< nonesuch, Op, Args... >::value_t is_detected
std::is_convertible< detected_t< Op, Args... >, To > is_detected_convertible
typename detected_or< Default, Op, Args... >::type detected_or_t
constexpr bool is_supported_operation
static bool equal(const T *p1, const T *p2)
static bool equal(const T *, const U *)
typename internal::ProductTypeImpl< std::decay_t< T >, std::decay_t< U > >::type type
static constexpr bool value
ValueType operator()(const ArgType &)
std::complex< typename ProductType< double, U >::type > type
std::complex< typename ProductType< float, U >::type > type
std::complex< typename ProductType< T, double >::type > type
std::complex< typename ProductType< T, float >::type > type
std::complex< typename ProductType< T, U >::type > type
decltype(std::declval< T >() *std::declval< U >()) type
void operator=(const nonesuch &)=delete
nonesuch(const nonesuch &)=delete
static constexpr bool value
static constexpr bool value
static constexpr bool value
static constexpr bool value
typename enable_if_all< Values... >::type enable_if_all_t
decltype(std::begin(std::declval< T >()), std::end(std::declval< T >())) begin_and_end_t
constexpr bool has_begin_and_end