diff --git a/dune/matrix-vector/algorithm.hh b/dune/matrix-vector/algorithm.hh index b9817e04eff80307b0a0db69f2e77ef6c0f1f0a4..30d2cf0fe5049020ef8d717600d3dbf38ab87a01 100644 --- a/dune/matrix-vector/algorithm.hh +++ b/dune/matrix-vector/algorithm.hh @@ -6,29 +6,16 @@ #include <type_traits> #include <dune/common/hybridutilities.hh> - -#include <dune/istl/multitypeblockmatrix.hh> -#include <dune/istl/multitypeblockvector.hh> +#include <dune/common/typetraits.hh> namespace Dune { namespace MatrixVector { -template <class C> -struct IsMultiTypeBlockContainer : public std::false_type {}; - -template <class... Args> -struct IsMultiTypeBlockContainer<MultiTypeBlockMatrix<Args...>> - : public std::true_type {}; - -template <class... Args> -struct IsMultiTypeBlockContainer<MultiTypeBlockVector<Args...>> - : public std::true_type {}; - /** * \brief Hybrid for loop over sparse range */ template <class Range, class F, - typename = std::enable_if_t<IsMultiTypeBlockContainer<Range>::value>> + typename = std::enable_if_t<Dune::IsTupleOrDerived<Range>::value>> void rangeForEach(const Range& range, F&& f) { using namespace Dune::Hybrid; forEach(integralRange(size(range)), [&](auto&& i) { f(range[i], i); });