for (S : REAL_AND_COMPLEX_SCALARS)
{
+ // Check that the class we declare here satisfies the
+ // vector-space-vector concept. If we catch it here,
+ // any mistake in the vector class declaration would
+ // show up in uses of this class later on as well.
+#ifdef DEAL_II_HAVE_CXX20
+ static_assert(concepts::is_vector_space_vector<BlockVector<S>>);
+#endif
template class BlockVector<S>;
}
\{
namespace distributed
\{
+#ifdef DEAL_II_HAVE_CXX20
+ static_assert(concepts::is_vector_space_vector<BlockVector<SCALAR>>);
+#endif
+
template class BlockVector<SCALAR>;
+
template void
BlockVector<SCALAR>::multivector_inner_product(
FullMatrix<SCALAR> &,
\{
namespace distributed
\{
+#ifdef DEAL_II_HAVE_CXX20
+ static_assert(concepts::is_vector_space_vector<
+ Vector<SCALAR, ::dealii::MemorySpace::Host>>);
+#endif
+
template class Vector<SCALAR, ::dealii::MemorySpace::Host>;
+
template void
Vector<SCALAR, ::dealii::MemorySpace::Host>::import_elements<
::dealii::MemorySpace::Host>(
{
namespace MPI
{
+ // Check that the class we declare here satisfies the
+ // vector-space-vector concept. If we catch it here,
+ // any mistake in the vector class declaration would
+ // show up in uses of this class later on as well.
+# ifdef DEAL_II_HAVE_CXX20
+ static_assert(concepts::is_vector_space_vector<BlockVector>);
+# endif
+
using size_type = types::global_dof_index;
BlockVector::~BlockVector()
{
namespace MPI
{
+ // Check that the class we declare here satisfies the
+ // vector-space-vector concept. If we catch it here,
+ // any mistake in the vector class declaration would
+ // show up in uses of this class later on as well.
+# ifdef DEAL_II_HAVE_CXX20
+ static_assert(concepts::is_vector_space_vector<Vector>);
+# endif
+
Vector::Vector()
{
// virtual functions called in constructors and destructors never use the
{
namespace EpetraWrappers
{
+ // Check that the class we declare here satisfies the
+ // vector-space-vector concept. If we catch it here,
+ // any mistake in the vector class declaration would
+ // show up in uses of this class later on as well.
+# ifdef DEAL_II_HAVE_CXX20
+ static_assert(concepts::is_vector_space_vector<Vector>);
+# endif
+
Vector::Vector()
: Subscriptor()
, vector(new Epetra_FEVector(
{
namespace TpetraWrappers
{
+ // Instantiate these vectors types for specific scalar types.
+ //
+ // While there:
+ // Check that the class we declare here satisfies the
+ // vector-space-vector concept. If we catch it here,
+ // any mistake in the vector class declaration would
+ // show up in uses of this class later on as well.
+
# ifdef HAVE_TPETRA_INST_FLOAT
+# ifdef DEAL_II_HAVE_CXX20
+ static_assert(concepts::is_vector_space_vector<Vector<float>>);
+# endif
template class Vector<float>;
# endif
# ifdef HAVE_TPETRA_INST_DOUBLE
+# ifdef DEAL_II_HAVE_CXX20
+ static_assert(concepts::is_vector_space_vector<Vector<double>>);
+# endif
template class Vector<double>;
# endif
# ifdef DEAL_II_WITH_COMPLEX_VALUES
# ifdef HAVE_TPETRA_INST_COMPLEX_FLOAT
+# ifdef DEAL_II_HAVE_CXX20
+ static_assert(concepts::is_vector_space_vector <
+ Vector<std::complex<float>>);
+# endif
template class Vector<std::complex<float>>;
# endif
# ifdef HAVE_TPETRA_INST_COMPLEX_DOUBLE
+# ifdef DEAL_II_HAVE_CXX20
+ static_assert(concepts::is_vector_space_vector <
+ Vector<std::complex<double>>);
+# endif
template class Vector<std::complex<double>>;
# endif
# endif
for (SCALAR : REAL_AND_COMPLEX_SCALARS)
{
+ // Check that the class we declare here satisfies the
+ // vector-space-vector concept. If we catch it here,
+ // any mistake in the vector class declaration would
+ // show up in uses of this class later on as well.
+#ifdef DEAL_II_HAVE_CXX20
+ static_assert(concepts::is_vector_space_vector<Vector<SCALAR>>);
+#endif
+
template class Vector<SCALAR>;
}