From 8ffed9086a285ffeb8c0f3714783dfb2d8ddf690 Mon Sep 17 00:00:00 2001
From: Elias Pipping <elias.pipping@fu-berlin.de>
Date: Mon, 15 May 2017 21:05:21 +0200
Subject: [PATCH] Make IsMultiTypeBlockContainer look more duck-like

MultiTypeBlockContainer behave like tuples
---
 dune/matrix-vector/algorithm.hh | 17 ++---------------
 1 file changed, 2 insertions(+), 15 deletions(-)

diff --git a/dune/matrix-vector/algorithm.hh b/dune/matrix-vector/algorithm.hh
index b9817e0..30d2cf0 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); });
-- 
GitLab