diff --git a/tests/MeshDataBaseForTests.hpp b/tests/MeshDataBaseForTests.hpp
index 86e0019d4f3c8631b79ade09be9b8ffe2c0cd8fe..79f3379f0cbfd51416594aa6015d66aa0b9f861c 100644
--- a/tests/MeshDataBaseForTests.hpp
+++ b/tests/MeshDataBaseForTests.hpp
@@ -15,6 +15,32 @@ class Mesh;
 
 class MeshDataBaseForTests
 {
+ public:
+  template <size_t Dimension>
+  class NamedMesh
+  {
+   private:
+    const std::string m_name;
+    const std::shared_ptr<const Mesh<Connectivity<Dimension>>> m_mesh;
+
+   public:
+    NamedMesh(const std::string& name, const std::shared_ptr<const Mesh<Connectivity<Dimension>>>& mesh)
+      : m_name(name), m_mesh(mesh)
+    {}
+
+    const std::string&
+    name() const
+    {
+      return m_name;
+    }
+
+    auto
+    mesh() const
+    {
+      return m_mesh;
+    }
+  };
+
  private:
   explicit MeshDataBaseForTests();
 
@@ -47,22 +73,22 @@ class MeshDataBaseForTests
   auto
   all1DMeshes() const
   {
-    return std::array{std::make_pair(std::string("cartesian 1d mesh"), cartesian1DMesh()),
-                      std::make_pair(std::string("unordered 1d mesh"), unordered1DMesh())};
+    return std::array{NamedMesh{"cartesian 1d mesh", cartesian1DMesh()},   //
+                      NamedMesh{"unordered 1d mesh", unordered1DMesh()}};
   }
 
   auto
   all2DMeshes() const
   {
-    return std::array{std::make_pair(std::string("cartesian 2d mesh"), cartesian2DMesh()),
-                      std::make_pair(std::string("hybrid 2d mesh"), hybrid2DMesh())};
+    return std::array{NamedMesh{"cartesian 2d mesh", cartesian2DMesh()},   //
+                      NamedMesh{"hybrid 2d mesh", hybrid2DMesh()}};
   }
 
   auto
   all3DMeshes() const
   {
-    return std::array{std::make_pair(std::string("cartesian 3d mesh"), cartesian3DMesh()),
-                      std::make_pair(std::string("hybrid 3d mesh"), hybrid3DMesh())};
+    return std::array{NamedMesh{"cartesian 3d mesh", cartesian3DMesh()},   //
+                      NamedMesh{std::string("hybrid 3d mesh"), hybrid3DMesh()}};
   }
 
   static void create();
diff --git a/tests/test_DiscreteFunctionInterpoler.cpp b/tests/test_DiscreteFunctionInterpoler.cpp
index d0f9f274f3ff95580a810d62718631198dd2ad86..809ca559ca254cbbb5d90c63f8dcd943a5df23c8 100644
--- a/tests/test_DiscreteFunctionInterpoler.cpp
+++ b/tests/test_DiscreteFunctionInterpoler.cpp
@@ -45,9 +45,11 @@ TEST_CASE("DiscreteFunctionInterpoler", "[scheme]")
 
     std::array mesh_list = MeshDataBaseForTests::get().all1DMeshes();
 
-    for (auto [section_name, mesh_1d] : mesh_list) {
-      SECTION(section_name)
+    for (auto named_mesh : mesh_list) {
+      SECTION(named_mesh.name())
       {
+        auto mesh_1d = named_mesh.mesh();
+
         auto xj = MeshDataManager::instance().getMeshData(*mesh_1d).xj();
 
         std::string_view data = R"(
@@ -342,9 +344,11 @@ let R3x3_non_linear_1d: R^1 -> R^3x3, x -> (2 * exp(x[0]) * sin(x[0]) + 3, sin(x
 
     std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
 
-    for (auto [section_name, mesh_2d] : mesh_list) {
-      SECTION(section_name)
+    for (auto named_mesh : mesh_list) {
+      SECTION(named_mesh.name())
       {
+        auto mesh_2d = named_mesh.mesh();
+
         auto xj = MeshDataManager::instance().getMeshData(*mesh_2d).xj();
 
         std::string_view data = R"(
@@ -640,9 +644,11 @@ let R3x3_non_linear_2d: R^2 -> R^3x3, x -> (2 * exp(x[0]) * sin(x[1]) + 3, sin(x
 
     std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-    for (auto [section_name, mesh_3d] : mesh_list) {
-      SECTION(section_name)
+    for (auto named_mesh : mesh_list) {
+      SECTION(named_mesh.name())
       {
+        auto mesh_3d = named_mesh.mesh();
+
         auto xj = MeshDataManager::instance().getMeshData(*mesh_3d).xj();
 
         std::string_view data = R"(
diff --git a/tests/test_DiscreteFunctionP0.cpp b/tests/test_DiscreteFunctionP0.cpp
index f57093c851fc7d95f83f988092df456d4321c775..7073def1e438a3a19df04723ba88349d3bb7d7b1 100644
--- a/tests/test_DiscreteFunctionP0.cpp
+++ b/tests/test_DiscreteFunctionP0.cpp
@@ -26,9 +26,10 @@ TEST_CASE("DiscreteFunctionP0", "[scheme]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all1DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
           DiscreteFunctionP0<Dimension, double> f{mesh};
           REQUIRE(f.dataType() == ASTNodeDataType::double_t);
           REQUIRE(f.descriptor().type() == DiscreteFunctionType::P0);
@@ -73,9 +74,10 @@ TEST_CASE("DiscreteFunctionP0", "[scheme]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
           DiscreteFunctionP0<Dimension, double> f{mesh};
           REQUIRE(f.dataType() == ASTNodeDataType::double_t);
           REQUIRE(f.descriptor().type() == DiscreteFunctionType::P0);
@@ -120,9 +122,11 @@ TEST_CASE("DiscreteFunctionP0", "[scheme]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
+
           DiscreteFunctionP0<Dimension, double> f{mesh};
           REQUIRE(f.dataType() == ASTNodeDataType::double_t);
           REQUIRE(f.descriptor().type() == DiscreteFunctionType::P0);
@@ -180,9 +184,11 @@ TEST_CASE("DiscreteFunctionP0", "[scheme]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all1DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
+
           DiscreteFunctionP0<Dimension, double> f{mesh};
           f.fill(3);
 
@@ -207,9 +213,11 @@ TEST_CASE("DiscreteFunctionP0", "[scheme]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
+
           DiscreteFunctionP0<Dimension, double> f{mesh};
           f.fill(3);
 
@@ -234,9 +242,11 @@ TEST_CASE("DiscreteFunctionP0", "[scheme]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
+
           DiscreteFunctionP0<Dimension, double> f{mesh};
           f.fill(3);
 
@@ -274,9 +284,11 @@ TEST_CASE("DiscreteFunctionP0", "[scheme]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all1DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
+
           SECTION("scalar")
           {
             const size_t value = parallel::rank() + 1;
@@ -374,9 +386,11 @@ TEST_CASE("DiscreteFunctionP0", "[scheme]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
+
           SECTION("scalar")
           {
             const size_t value = parallel::rank() + 1;
@@ -474,9 +488,11 @@ TEST_CASE("DiscreteFunctionP0", "[scheme]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
+
           SECTION("scalar")
           {
             const size_t value = parallel::rank() + 1;
@@ -576,9 +592,11 @@ TEST_CASE("DiscreteFunctionP0", "[scheme]")
       constexpr size_t Dimension = 1;
       std::array mesh_list       = MeshDataBaseForTests::get().all1DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
+
           auto xj = MeshDataManager::instance().getMeshData(*mesh).xj();
 
           SECTION("unary minus")
@@ -659,9 +677,11 @@ TEST_CASE("DiscreteFunctionP0", "[scheme]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all1DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
+
           auto xj = MeshDataManager::instance().getMeshData(*mesh).xj();
 
           SECTION("inner operators")
@@ -1238,9 +1258,11 @@ TEST_CASE("DiscreteFunctionP0", "[scheme]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
+
           auto xj = MeshDataManager::instance().getMeshData(*mesh).xj();
 
           SECTION("inner operators")
@@ -1822,9 +1844,11 @@ TEST_CASE("DiscreteFunctionP0", "[scheme]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
+
           auto xj = MeshDataManager::instance().getMeshData(*mesh).xj();
 
           SECTION("inner operators")
@@ -2469,9 +2493,11 @@ TEST_CASE("DiscreteFunctionP0", "[scheme]")
       constexpr size_t Dimension = 1;
       std::array mesh_list       = MeshDataBaseForTests::get().all1DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
+
           auto xj = MeshDataManager::instance().getMeshData(*mesh).xj();
 
           DiscreteFunctionP0<Dimension, double> positive_function{mesh};
@@ -2811,9 +2837,11 @@ TEST_CASE("DiscreteFunctionP0", "[scheme]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
+
           auto xj = MeshDataManager::instance().getMeshData(*mesh).xj();
 
           DiscreteFunctionP0<Dimension, double> positive_function{mesh};
@@ -3153,9 +3181,11 @@ TEST_CASE("DiscreteFunctionP0", "[scheme]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
+
           auto xj = MeshDataManager::instance().getMeshData(*mesh).xj();
 
           DiscreteFunctionP0<Dimension, double> positive_function{mesh};
@@ -3501,9 +3531,11 @@ TEST_CASE("DiscreteFunctionP0", "[scheme]")
 
         std::array mesh_list = MeshDataBaseForTests::get().all1DMeshes();
 
-        for (auto [section_name, mesh_1] : mesh_list) {
-          SECTION(section_name)
+        for (auto named_mesh : mesh_list) {
+          SECTION(named_mesh.name())
           {
+            auto mesh_1 = named_mesh.mesh();
+
             std::shared_ptr mesh_2 =
               std::make_shared<Mesh<Connectivity<Dimension>>>(mesh_1->shared_connectivity(), mesh_1->xr());
 
@@ -3526,9 +3558,11 @@ TEST_CASE("DiscreteFunctionP0", "[scheme]")
 
         std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
 
-        for (auto [section_name, mesh_1] : mesh_list) {
-          SECTION(section_name)
+        for (auto named_mesh : mesh_list) {
+          SECTION(named_mesh.name())
           {
+            auto mesh_1 = named_mesh.mesh();
+
             std::shared_ptr mesh_2 =
               std::make_shared<Mesh<Connectivity<Dimension>>>(mesh_1->shared_connectivity(), mesh_1->xr());
 
@@ -3551,9 +3585,11 @@ TEST_CASE("DiscreteFunctionP0", "[scheme]")
 
         std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-        for (auto [section_name, mesh_1] : mesh_list) {
-          SECTION(section_name)
+        for (auto named_mesh : mesh_list) {
+          SECTION(named_mesh.name())
           {
+            auto mesh_1 = named_mesh.mesh();
+
             std::shared_ptr mesh_2 =
               std::make_shared<Mesh<Connectivity<Dimension>>>(mesh_1->shared_connectivity(), mesh_1->xr());
 
diff --git a/tests/test_DiscreteFunctionP0Vector.cpp b/tests/test_DiscreteFunctionP0Vector.cpp
index 217418fe5db664fdc8ae85dd8f1baa0f461ca409..6e351c404a7b5f57d7b39e5a3f70d43cf62a5635 100644
--- a/tests/test_DiscreteFunctionP0Vector.cpp
+++ b/tests/test_DiscreteFunctionP0Vector.cpp
@@ -31,9 +31,10 @@ TEST_CASE("DiscreteFunctionP0Vector", "[scheme]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all1DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
           DiscreteFunctionP0Vector<Dimension, double> f{mesh, size};
           REQUIRE(f.dataType() == ASTNodeDataType::double_t);
           REQUIRE(f.descriptor().type() == DiscreteFunctionType::P0Vector);
@@ -78,9 +79,10 @@ TEST_CASE("DiscreteFunctionP0Vector", "[scheme]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
           DiscreteFunctionP0Vector<Dimension, double> f{mesh, size};
           REQUIRE(f.dataType() == ASTNodeDataType::double_t);
           REQUIRE(f.descriptor().type() == DiscreteFunctionType::P0Vector);
@@ -125,9 +127,10 @@ TEST_CASE("DiscreteFunctionP0Vector", "[scheme]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
           DiscreteFunctionP0Vector<Dimension, double> f{mesh, size};
           REQUIRE(f.dataType() == ASTNodeDataType::double_t);
           REQUIRE(f.descriptor().type() == DiscreteFunctionType::P0Vector);
@@ -186,9 +189,10 @@ TEST_CASE("DiscreteFunctionP0Vector", "[scheme]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all1DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh                  = named_mesh.mesh();
           constexpr size_t Dimension = 1;
 
           DiscreteFunctionP0Vector<Dimension, double> f{mesh, size};
@@ -207,9 +211,10 @@ TEST_CASE("DiscreteFunctionP0Vector", "[scheme]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
           DiscreteFunctionP0Vector<Dimension, double> f{mesh, size};
           f.fill(2.3);
 
@@ -226,9 +231,10 @@ TEST_CASE("DiscreteFunctionP0Vector", "[scheme]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
           DiscreteFunctionP0Vector<Dimension, double> f{mesh, size};
           f.fill(3.2);
 
@@ -260,9 +266,11 @@ TEST_CASE("DiscreteFunctionP0Vector", "[scheme]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all1DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
+
           const size_t size  = 3;
           const size_t value = parallel::rank() + 1;
           const size_t zero  = 0;
@@ -304,9 +312,11 @@ TEST_CASE("DiscreteFunctionP0Vector", "[scheme]")
       constexpr size_t Dimension = 2;
       std::array mesh_list       = MeshDataBaseForTests::get().all2DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
+
           const size_t size  = 3;
           const size_t value = parallel::rank() + 1;
           const size_t zero  = 0;
@@ -349,9 +359,11 @@ TEST_CASE("DiscreteFunctionP0Vector", "[scheme]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
+
           const size_t size  = 3;
           const size_t value = parallel::rank() + 1;
           const size_t zero  = 0;
@@ -398,9 +410,11 @@ TEST_CASE("DiscreteFunctionP0Vector", "[scheme]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all1DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
+
           auto xj = MeshDataManager::instance().getMeshData(*mesh).xj();
 
           SECTION("unary minus")
@@ -439,9 +453,11 @@ TEST_CASE("DiscreteFunctionP0Vector", "[scheme]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
+
           auto xj = MeshDataManager::instance().getMeshData(*mesh).xj();
 
           SECTION("unary minus")
@@ -481,9 +497,11 @@ TEST_CASE("DiscreteFunctionP0Vector", "[scheme]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
+
           auto xj = MeshDataManager::instance().getMeshData(*mesh).xj();
 
           SECTION("unary minus")
@@ -527,9 +545,11 @@ TEST_CASE("DiscreteFunctionP0Vector", "[scheme]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all1DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
+
           auto xj = MeshDataManager::instance().getMeshData(*mesh).xj();
 
           SECTION("inner operators")
@@ -659,9 +679,11 @@ TEST_CASE("DiscreteFunctionP0Vector", "[scheme]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
+
           auto xj = MeshDataManager::instance().getMeshData(*mesh).xj();
 
           SECTION("inner operators")
@@ -795,9 +817,11 @@ TEST_CASE("DiscreteFunctionP0Vector", "[scheme]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
+
           auto xj = MeshDataManager::instance().getMeshData(*mesh).xj();
 
           SECTION("inner operators")
diff --git a/tests/test_DiscreteFunctionUtils.cpp b/tests/test_DiscreteFunctionUtils.cpp
index 88ddd4025980c0edafe28966b78a8612e8360a80..3783a19c99cb67066565c507abfeca6ce0f5d61f 100644
--- a/tests/test_DiscreteFunctionUtils.cpp
+++ b/tests/test_DiscreteFunctionUtils.cpp
@@ -18,9 +18,11 @@ TEST_CASE("DiscreteFunctionUtils", "[scheme]")
 
     std::array mesh_list = MeshDataBaseForTests::get().all1DMeshes();
 
-    for (auto [section_name, mesh] : mesh_list) {
-      SECTION(section_name)
+    for (auto named_mesh : mesh_list) {
+      SECTION(named_mesh.name())
       {
+        auto mesh = named_mesh.mesh();
+
         std::shared_ptr mesh_copy =
           std::make_shared<std::decay_t<decltype(*mesh)>>(mesh->shared_connectivity(), mesh->xr());
 
@@ -169,9 +171,11 @@ TEST_CASE("DiscreteFunctionUtils", "[scheme]")
 
     std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
 
-    for (auto [section_name, mesh] : mesh_list) {
-      SECTION(section_name)
+    for (auto named_mesh : mesh_list) {
+      SECTION(named_mesh.name())
       {
+        auto mesh = named_mesh.mesh();
+
         std::shared_ptr mesh_copy =
           std::make_shared<std::decay_t<decltype(*mesh)>>(mesh->shared_connectivity(), mesh->xr());
 
@@ -320,9 +324,11 @@ TEST_CASE("DiscreteFunctionUtils", "[scheme]")
 
     std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-    for (auto [section_name, mesh] : mesh_list) {
-      SECTION(section_name)
+    for (auto named_mesh : mesh_list) {
+      SECTION(named_mesh.name())
       {
+        auto mesh = named_mesh.mesh();
+
         std::shared_ptr mesh_copy =
           std::make_shared<std::decay_t<decltype(*mesh)>>(mesh->shared_connectivity(), mesh->xr());
 
@@ -473,9 +479,11 @@ TEST_CASE("DiscreteFunctionUtils", "[scheme]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all1DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
+
           std::shared_ptr other_mesh =
             CartesianMeshBuilder{TinyVector<1>{-1}, TinyVector<1>{3}, TinyVector<1, size_t>{19}}.mesh();
 
diff --git a/tests/test_DiscreteFunctionVectorInterpoler.cpp b/tests/test_DiscreteFunctionVectorInterpoler.cpp
index c0f28f11409dcf89bd3c8bffbfcff8e8be7fb0a8..692dd8c6c18ad85f87f5c85dcc41a6bcb0838312 100644
--- a/tests/test_DiscreteFunctionVectorInterpoler.cpp
+++ b/tests/test_DiscreteFunctionVectorInterpoler.cpp
@@ -55,9 +55,11 @@ TEST_CASE("DiscreteFunctionVectorInterpoler", "[scheme]")
 
     std::array mesh_list = MeshDataBaseForTests::get().all1DMeshes();
 
-    for (auto [section_name, mesh_1d] : mesh_list) {
-      SECTION(section_name)
+    for (auto named_mesh : mesh_list) {
+      SECTION(named_mesh.name())
       {
+        auto mesh_1d = named_mesh.mesh();
+
         auto xj = MeshDataManager::instance().getMeshData(*mesh_1d).xj();
 
         std::string_view data = R"(
@@ -161,9 +163,11 @@ let R_scalar_non_linear_1d: R^1 -> R, x -> 2 * exp(x[0]) + 3;
 
     std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
 
-    for (auto [section_name, mesh_2d] : mesh_list) {
-      SECTION(section_name)
+    for (auto named_mesh : mesh_list) {
+      SECTION(named_mesh.name())
       {
+        auto mesh_2d = named_mesh.mesh();
+
         auto xj = MeshDataManager::instance().getMeshData(*mesh_2d).xj();
 
         std::string_view data = R"(
@@ -267,9 +271,11 @@ let R_scalar_non_linear_2d: R^2 -> R, x -> 2 * exp(x[0] + x[1]) + 3;
 
     std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-    for (auto [section_name, mesh_3d] : mesh_list) {
-      SECTION(section_name)
+    for (auto named_mesh : mesh_list) {
+      SECTION(named_mesh.name())
       {
+        auto mesh_3d = named_mesh.mesh();
+
         auto xj = MeshDataManager::instance().getMeshData(*mesh_3d).xj();
 
         std::string_view data = R"(
@@ -371,9 +377,11 @@ let R_scalar_non_linear_3d: R^3 -> R, x -> 2 * exp(x[0] + x[1]) + 3 * x[2];
   {
     std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-    for (auto [section_name, mesh_3d] : mesh_list) {
-      SECTION(section_name)
+    for (auto named_mesh : mesh_list) {
+      SECTION(named_mesh.name())
       {
+        auto mesh_3d = named_mesh.mesh();
+
         auto xj = MeshDataManager::instance().getMeshData(*mesh_3d).xj();
 
         std::string_view data = R"(
diff --git a/tests/test_EmbeddedIDiscreteFunctionMathFunctions.cpp b/tests/test_EmbeddedIDiscreteFunctionMathFunctions.cpp
index 76dae30b70ce901a94b158df6a04437b1ca1f92b..251424f6a7340244b6ac60879cc85653b3115351 100644
--- a/tests/test_EmbeddedIDiscreteFunctionMathFunctions.cpp
+++ b/tests/test_EmbeddedIDiscreteFunctionMathFunctions.cpp
@@ -111,9 +111,11 @@ TEST_CASE("EmbeddedIDiscreteFunctionMathFunctions", "[scheme]")
 
     std::array mesh_list = MeshDataBaseForTests::get().all1DMeshes();
 
-    for (auto [section_name, mesh] : mesh_list) {
-      SECTION(section_name)
+    for (auto named_mesh : mesh_list) {
+      SECTION(named_mesh.name())
       {
+        auto mesh = named_mesh.mesh();
+
         std::shared_ptr other_mesh =
           std::make_shared<Mesh<Connectivity<Dimension>>>(mesh->shared_connectivity(), mesh->xr());
 
@@ -618,9 +620,11 @@ TEST_CASE("EmbeddedIDiscreteFunctionMathFunctions", "[scheme]")
 
     std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
 
-    for (auto [section_name, mesh] : mesh_list) {
-      SECTION(section_name)
+    for (auto named_mesh : mesh_list) {
+      SECTION(named_mesh.name())
       {
+        auto mesh = named_mesh.mesh();
+
         std::shared_ptr other_mesh =
           std::make_shared<Mesh<Connectivity<Dimension>>>(mesh->shared_connectivity(), mesh->xr());
 
@@ -1125,9 +1129,11 @@ TEST_CASE("EmbeddedIDiscreteFunctionMathFunctions", "[scheme]")
 
     std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-    for (auto [section_name, mesh] : mesh_list) {
-      SECTION(section_name)
+    for (auto named_mesh : mesh_list) {
+      SECTION(named_mesh.name())
       {
+        auto mesh = named_mesh.mesh();
+
         std::shared_ptr other_mesh =
           std::make_shared<Mesh<Connectivity<Dimension>>>(mesh->shared_connectivity(), mesh->xr());
 
diff --git a/tests/test_EmbeddedIDiscreteFunctionOperators.cpp b/tests/test_EmbeddedIDiscreteFunctionOperators.cpp
index a20047a27a420027aff9a39fa24c3189e1a72b0b..1a85ef8d4da602920d68df16e4fd7f2dcb0952b5 100644
--- a/tests/test_EmbeddedIDiscreteFunctionOperators.cpp
+++ b/tests/test_EmbeddedIDiscreteFunctionOperators.cpp
@@ -197,9 +197,11 @@ TEST_CASE("EmbeddedIDiscreteFunctionOperators", "[scheme]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all1DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
+
           std::shared_ptr other_mesh =
             std::make_shared<Mesh<Connectivity<Dimension>>>(mesh->shared_connectivity(), mesh->xr());
 
@@ -892,9 +894,11 @@ TEST_CASE("EmbeddedIDiscreteFunctionOperators", "[scheme]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
+
           std::shared_ptr other_mesh =
             std::make_shared<Mesh<Connectivity<Dimension>>>(mesh->shared_connectivity(), mesh->xr());
 
@@ -1587,9 +1591,11 @@ TEST_CASE("EmbeddedIDiscreteFunctionOperators", "[scheme]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
+
           std::shared_ptr other_mesh =
             std::make_shared<Mesh<Connectivity<Dimension>>>(mesh->shared_connectivity(), mesh->xr());
 
@@ -2285,9 +2291,11 @@ TEST_CASE("EmbeddedIDiscreteFunctionOperators", "[scheme]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all1DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
+
           CellValue<const Rd> xj = MeshDataManager::instance().getMeshData(*mesh).xj();
 
           CellValue<double> u_R_values = [=] {
@@ -2427,9 +2435,11 @@ TEST_CASE("EmbeddedIDiscreteFunctionOperators", "[scheme]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
+
           CellValue<const Rd> xj = MeshDataManager::instance().getMeshData(*mesh).xj();
 
           CellValue<double> u_R_values = [=] {
@@ -2569,9 +2579,11 @@ TEST_CASE("EmbeddedIDiscreteFunctionOperators", "[scheme]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-      for (auto [section_name, mesh] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh = named_mesh.mesh();
+
           CellValue<const Rd> xj = MeshDataManager::instance().getMeshData(*mesh).xj();
 
           CellValue<double> u_R_values = [=] {
diff --git a/tests/test_EmbeddedIDiscreteFunctionUtils.cpp b/tests/test_EmbeddedIDiscreteFunctionUtils.cpp
index 8a64813728fcc205ea09d26af27eb6bca976e9d5..e7d0e8eea200cb115be60a2ba789999155cf5fab 100644
--- a/tests/test_EmbeddedIDiscreteFunctionUtils.cpp
+++ b/tests/test_EmbeddedIDiscreteFunctionUtils.cpp
@@ -31,9 +31,11 @@ TEST_CASE("EmbeddedIDiscreteFunctionUtils", "[language]")
     {
       std::array mesh_list = MeshDataBaseForTests::get().all1DMeshes();
 
-      for (auto [section_name, mesh_1d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_1d = named_mesh.mesh();
+
           REQUIRE(EmbeddedIDiscreteFunctionUtils::getOperandTypeName(DiscreteFunctionP0<1, double>{mesh_1d}) ==
                   "Vh(P0:R)");
 
@@ -58,9 +60,11 @@ TEST_CASE("EmbeddedIDiscreteFunctionUtils", "[language]")
     {
       std::array mesh_list = MeshDataBaseForTests::get().all1DMeshes();
 
-      for (auto [section_name, mesh_1d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_1d = named_mesh.mesh();
+
           REQUIRE(EmbeddedIDiscreteFunctionUtils::getOperandTypeName(DiscreteFunctionP0Vector<1, double>{mesh_1d, 2}) ==
                   "Vh(P0Vector:R)");
         }
@@ -74,9 +78,11 @@ TEST_CASE("EmbeddedIDiscreteFunctionUtils", "[language]")
     {
       std::array mesh_list = MeshDataBaseForTests::get().all1DMeshes();
 
-      for (auto [section_name, mesh_1d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_1d = named_mesh.mesh();
+
           REQUIRE(EmbeddedIDiscreteFunctionUtils::isSameDiscretization(std::make_shared<DiscreteFunctionP0<1, double>>(
                                                                          mesh_1d),
                                                                        std::make_shared<DiscreteFunctionP0<1, double>>(
@@ -93,9 +99,11 @@ TEST_CASE("EmbeddedIDiscreteFunctionUtils", "[language]")
     {
       std::array mesh_list = MeshDataBaseForTests::get().all1DMeshes();
 
-      for (auto [section_name, mesh_1d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_1d = named_mesh.mesh();
+
           REQUIRE(EmbeddedIDiscreteFunctionUtils::isSameDiscretization(DiscreteFunctionP0<1, double>{mesh_1d},
                                                                        DiscreteFunctionP0<1, double>{mesh_1d}));
 
@@ -133,9 +141,11 @@ TEST_CASE("EmbeddedIDiscreteFunctionUtils", "[language]")
     {
       std::array mesh_list = MeshDataBaseForTests::get().all1DMeshes();
 
-      for (auto [section_name, mesh_1d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_1d = named_mesh.mesh();
+
           REQUIRE_THROWS_WITH(EmbeddedIDiscreteFunctionUtils::isSameDiscretization(DiscreteFunctionP0<1,
                                                                                                       int64_t>{mesh_1d},
                                                                                    DiscreteFunctionP0<1, int64_t>{
diff --git a/tests/test_InterpolateItemArray.cpp b/tests/test_InterpolateItemArray.cpp
index df01d8130ccfc52d1b69c67722bc5c5c06a3be00..2974e01d8732d35702b32493f0cb810932de2df2 100644
--- a/tests/test_InterpolateItemArray.cpp
+++ b/tests/test_InterpolateItemArray.cpp
@@ -48,9 +48,11 @@ TEST_CASE("InterpolateItemArray", "[language]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all1DMeshes();
 
-      for (auto [section_name, mesh_1d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_1d = named_mesh.mesh();
+
           auto xj = MeshDataManager::instance().getMeshData(*mesh_1d).xj();
 
           std::string_view data = R"(
@@ -119,9 +121,11 @@ let scalar_non_linear_1d: R^1 -> R, x -> 2 * exp(x[0]) + 3;
 
       std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
 
-      for (auto [section_name, mesh_2d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_2d = named_mesh.mesh();
+
           auto xj = MeshDataManager::instance().getMeshData(*mesh_2d).xj();
 
           std::string_view data = R"(
@@ -190,9 +194,11 @@ let scalar_non_linear_2d: R^2 -> R, x -> 2*exp(x[0])*sin(x[1])+3;
 
       std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-      for (auto [section_name, mesh_3d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_3d = named_mesh.mesh();
+
           auto xj = MeshDataManager::instance().getMeshData(*mesh_3d).xj();
 
           std::string_view data = R"(
@@ -275,9 +281,11 @@ let scalar_non_linear_3d: R^3 -> R, x -> 2 * exp(x[0]) * sin(x[1]) * x[2] + 3;
 
       std::array mesh_list = MeshDataBaseForTests::get().all1DMeshes();
 
-      for (auto [section_name, mesh_1d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_1d = named_mesh.mesh();
+
           auto xj = MeshDataManager::instance().getMeshData(*mesh_1d).xj();
 
           Array<const CellId> cell_id_list = [&] {
@@ -354,9 +362,11 @@ let scalar_non_linear_3d: R^3 -> R, x -> 2 * exp(x[0]) * sin(x[1]) * x[2] + 3;
 
       std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
 
-      for (auto [section_name, mesh_2d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_2d = named_mesh.mesh();
+
           auto xj = MeshDataManager::instance().getMeshData(*mesh_2d).xj();
 
           Array<CellId> cell_id_list{mesh_2d->numberOfCells() / 2};
@@ -430,9 +440,11 @@ let scalar_non_linear_2d: R^2 -> R, x -> 2*exp(x[0])*sin(x[1])+3;
 
       std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-      for (auto [section_name, mesh_3d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_3d = named_mesh.mesh();
+
           auto xj = MeshDataManager::instance().getMeshData(*mesh_3d).xj();
 
           Array<CellId> cell_id_list{mesh_3d->numberOfCells() / 2};
diff --git a/tests/test_InterpolateItemValue.cpp b/tests/test_InterpolateItemValue.cpp
index 202eee282d2a65d3f2d8eb0f1a771f14115ed94b..fabbda2560ac969e6305586041f531d0b348a0f8 100644
--- a/tests/test_InterpolateItemValue.cpp
+++ b/tests/test_InterpolateItemValue.cpp
@@ -45,9 +45,11 @@ TEST_CASE("InterpolateItemValue", "[language]")
 
       std::array mesh_list = MeshDataBaseForTests::get().all1DMeshes();
 
-      for (auto [section_name, mesh_1d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_1d = named_mesh.mesh();
+
           auto xj = MeshDataManager::instance().getMeshData(*mesh_1d).xj();
 
           std::string_view data = R"(
@@ -214,9 +216,11 @@ let R2x2_non_linear_1d: R^1 -> R^2x2, x -> (2 * exp(x[0]) * sin(x[0]) + 3, sin(x
 
       std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
 
-      for (auto [section_name, mesh_2d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_2d = named_mesh.mesh();
+
           auto xj = MeshDataManager::instance().getMeshData(*mesh_2d).xj();
 
           std::string_view data = R"(
@@ -377,9 +381,11 @@ let R2x2_non_linear_2d: R^2 -> R^2x2, x -> (2*exp(x[0])*sin(x[1])+3, sin(x[0]-2*
 
       std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-      for (auto [section_name, mesh_3d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_3d = named_mesh.mesh();
+
           auto xj = MeshDataManager::instance().getMeshData(*mesh_3d).xj();
 
           std::string_view data = R"(
@@ -554,9 +560,11 @@ let R2x2_non_linear_3d: R^3 -> R^2x2, x -> (2 * exp(x[0]) * sin(x[1]) + 3 * cos(
 
       std::array mesh_list = MeshDataBaseForTests::get().all1DMeshes();
 
-      for (auto [section_name, mesh_1d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_1d = named_mesh.mesh();
+
           auto xj = MeshDataManager::instance().getMeshData(*mesh_1d).xj();
 
           Array<const CellId> cell_id_list = [&] {
@@ -734,9 +742,11 @@ let R2x2_non_linear_1d: R^1 -> R^2x2, x -> (2 * exp(x[0]) * sin(x[0]) + 3, sin(x
 
       std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
 
-      for (auto [section_name, mesh_2d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_2d = named_mesh.mesh();
+
           auto xj = MeshDataManager::instance().getMeshData(*mesh_2d).xj();
 
           Array<CellId> cell_id_list{mesh_2d->numberOfCells() / 2};
@@ -906,9 +916,11 @@ let R2x2_non_linear_2d: R^2 -> R^2x2, x -> (2*exp(x[0])*sin(x[1])+3, sin(x[0]-2*
 
       std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-      for (auto [section_name, mesh_3d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_3d = named_mesh.mesh();
+
           auto xj = MeshDataManager::instance().getMeshData(*mesh_3d).xj();
 
           Array<CellId> cell_id_list{mesh_3d->numberOfCells() / 2};
diff --git a/tests/test_ItemArray.cpp b/tests/test_ItemArray.cpp
index c8a4bd8555f3b75e4b3179474142208507159b80..3422d1da9c8e9627abf75fae743a826809ca5505 100644
--- a/tests/test_ItemArray.cpp
+++ b/tests/test_ItemArray.cpp
@@ -30,9 +30,11 @@ TEST_CASE("ItemArray", "[mesh]")
   {
     std::array mesh_list = MeshDataBaseForTests::get().all1DMeshes();
 
-    for (auto [section_name, mesh_1d] : mesh_list) {
-      SECTION(section_name)
+    for (auto named_mesh : mesh_list) {
+      SECTION(named_mesh.name())
       {
+        auto mesh_1d = named_mesh.mesh();
+
         const Connectivity<1>& connectivity = mesh_1d->connectivity();
 
         REQUIRE_NOTHROW(NodeArray<int>{connectivity, 3});
@@ -66,9 +68,11 @@ TEST_CASE("ItemArray", "[mesh]")
   {
     std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
 
-    for (auto [section_name, mesh_2d] : mesh_list) {
-      SECTION(section_name)
+    for (auto named_mesh : mesh_list) {
+      SECTION(named_mesh.name())
       {
+        auto mesh_2d = named_mesh.mesh();
+
         const Connectivity<2>& connectivity = mesh_2d->connectivity();
 
         REQUIRE_NOTHROW(NodeArray<int>{connectivity, 2});
@@ -100,9 +104,11 @@ TEST_CASE("ItemArray", "[mesh]")
   {
     std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-    for (auto [section_name, mesh_3d] : mesh_list) {
-      SECTION(section_name)
+    for (auto named_mesh : mesh_list) {
+      SECTION(named_mesh.name())
       {
+        auto mesh_3d = named_mesh.mesh();
+
         const Connectivity<3>& connectivity = mesh_3d->connectivity();
 
         REQUIRE_NOTHROW(NodeArray<int>{connectivity, 3});
@@ -132,9 +138,11 @@ TEST_CASE("ItemArray", "[mesh]")
   {
     std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-    for (auto [section_name, mesh_3d] : mesh_list) {
-      SECTION(section_name)
+    for (auto named_mesh : mesh_list) {
+      SECTION(named_mesh.name())
       {
+        auto mesh_3d = named_mesh.mesh();
+
         const Connectivity<3>& connectivity = mesh_3d->connectivity();
 
         CellArray<size_t> cell_array{connectivity, 3};
@@ -181,9 +189,11 @@ TEST_CASE("ItemArray", "[mesh]")
 
     std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-    for (auto [section_name, mesh_3d] : mesh_list) {
-      SECTION(section_name)
+    for (auto named_mesh : mesh_list) {
+      SECTION(named_mesh.name())
       {
+        auto mesh_3d = named_mesh.mesh();
+
         const Connectivity<3>& connectivity = mesh_3d->connectivity();
 
         CellArray<int> cell_array{connectivity, 4};
@@ -214,9 +224,11 @@ TEST_CASE("ItemArray", "[mesh]")
   {
     std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
 
-    for (auto [section_name, mesh_2d] : mesh_list) {
-      SECTION(section_name)
+    for (auto named_mesh : mesh_list) {
+      SECTION(named_mesh.name())
       {
+        auto mesh_2d = named_mesh.mesh();
+
         const Connectivity<2>& connectivity = mesh_2d->connectivity();
 
         WeakFaceArray<int> weak_face_array{connectivity, 5};
@@ -252,9 +264,11 @@ TEST_CASE("ItemArray", "[mesh]")
     {
       std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-      for (auto [section_name, mesh_3d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_3d = named_mesh.mesh();
+
           const Connectivity<3>& connectivity = mesh_3d->connectivity();
 
           CellArray<int> cell_array{connectivity, 1};
@@ -280,9 +294,11 @@ TEST_CASE("ItemArray", "[mesh]")
     {
       std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-      for (auto [section_name, mesh_3d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_3d = named_mesh.mesh();
+
           const Connectivity<3>& connectivity = mesh_3d->connectivity();
 
           CellArray<size_t> cell_array{connectivity, 2};
diff --git a/tests/test_ItemArrayUtils.cpp b/tests/test_ItemArrayUtils.cpp
index 204986ce6f3ad9e88565559a8558e9dbf42faeb2..af91ecb70897073a4069f20457190b6e20318e72 100644
--- a/tests/test_ItemArrayUtils.cpp
+++ b/tests/test_ItemArrayUtils.cpp
@@ -21,9 +21,11 @@ TEST_CASE("ItemArrayUtils", "[mesh]")
     {
       std::array mesh_list = MeshDataBaseForTests::get().all1DMeshes();
 
-      for (auto [section_name, mesh_1d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_1d = named_mesh.mesh();
+
           const Connectivity<1>& connectivity = mesh_1d->connectivity();
 
           SECTION("node")
@@ -277,257 +279,254 @@ TEST_CASE("ItemArrayUtils", "[mesh]")
     {
       std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
 
-      for (auto [section_name, mesh_2d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
-          for (auto [section_name, mesh_2d] : mesh_list) {
-            SECTION(section_name)
-            {
-              const Connectivity<2>& connectivity = mesh_2d->connectivity();
-
-              SECTION("node")
-              {
-                WeakNodeArray<size_t> weak_node_array{connectivity, 3};
-                auto node_number = connectivity.nodeNumber();
-
-                for (NodeId i_node = 0; i_node < mesh_2d->numberOfNodes(); ++i_node) {
-                  Array array         = weak_node_array[i_node];
-                  const size_t number = node_number[i_node];
+          auto mesh_2d = named_mesh.mesh();
+
+          const Connectivity<2>& connectivity = mesh_2d->connectivity();
+
+          SECTION("node")
+          {
+            WeakNodeArray<size_t> weak_node_array{connectivity, 3};
+            auto node_number = connectivity.nodeNumber();
+
+            for (NodeId i_node = 0; i_node < mesh_2d->numberOfNodes(); ++i_node) {
+              Array array         = weak_node_array[i_node];
+              const size_t number = node_number[i_node];
+              for (size_t i = 0; i < array.size(); ++i) {
+                array[i] = number + (parallel::rank() + 1) * i;
+              }
+            }
+
+            NodeArray<const size_t> node_array{weak_node_array};
+
+            REQUIRE(node_array.connectivity_ptr() == weak_node_array.connectivity_ptr());
+
+            {   // before synchronization
+              auto node_owner    = connectivity.nodeOwner();
+              auto node_is_owned = connectivity.nodeIsOwned();
+
+              bool is_synchronized = (parallel::size() > 1);
+              bool is_valid        = true;
+              for (NodeId i_node = 0; i_node < mesh_2d->numberOfNodes(); ++i_node) {
+                Array array         = node_array[i_node];
+                const size_t number = node_number[i_node];
+                const size_t owner  = node_owner[i_node];
+                if (node_is_owned[i_node]) {
                   for (size_t i = 0; i < array.size(); ++i) {
-                    array[i] = number + (parallel::rank() + 1) * i;
+                    is_valid &= (array[i] == number + (owner + 1) * i);
                   }
-                }
-
-                NodeArray<const size_t> node_array{weak_node_array};
-
-                REQUIRE(node_array.connectivity_ptr() == weak_node_array.connectivity_ptr());
-
-                {   // before synchronization
-                  auto node_owner    = connectivity.nodeOwner();
-                  auto node_is_owned = connectivity.nodeIsOwned();
-
-                  bool is_synchronized = (parallel::size() > 1);
-                  bool is_valid        = true;
-                  for (NodeId i_node = 0; i_node < mesh_2d->numberOfNodes(); ++i_node) {
-                    Array array         = node_array[i_node];
-                    const size_t number = node_number[i_node];
-                    const size_t owner  = node_owner[i_node];
-                    if (node_is_owned[i_node]) {
-                      for (size_t i = 0; i < array.size(); ++i) {
-                        is_valid &= (array[i] == number + (owner + 1) * i);
-                      }
-                    } else {
-                      for (size_t i = 0; i < array.size(); ++i) {
-                        is_synchronized &= (array[i] == number + (owner + 1) * i);
-                      }
-                    }
+                } else {
+                  for (size_t i = 0; i < array.size(); ++i) {
+                    is_synchronized &= (array[i] == number + (owner + 1) * i);
                   }
-
-                  REQUIRE(is_valid);
-                  REQUIRE(not is_synchronized);
                 }
+              }
 
-                synchronize(weak_node_array);
+              REQUIRE(is_valid);
+              REQUIRE(not is_synchronized);
+            }
 
-                {   // after synchronization
-                  auto node_owner = connectivity.nodeOwner();
+            synchronize(weak_node_array);
 
-                  bool is_synchronized = true;
-                  for (NodeId i_node = 0; i_node < mesh_2d->numberOfNodes(); ++i_node) {
-                    Array array         = node_array[i_node];
-                    const size_t number = node_number[i_node];
-                    const size_t owner  = node_owner[i_node];
-                    for (size_t i = 0; i < array.size(); ++i) {
-                      is_synchronized &= (array[i] == number + (owner + 1) * i);
-                    }
-                  }
+            {   // after synchronization
+              auto node_owner = connectivity.nodeOwner();
 
-                  REQUIRE(is_synchronized);
+              bool is_synchronized = true;
+              for (NodeId i_node = 0; i_node < mesh_2d->numberOfNodes(); ++i_node) {
+                Array array         = node_array[i_node];
+                const size_t number = node_number[i_node];
+                const size_t owner  = node_owner[i_node];
+                for (size_t i = 0; i < array.size(); ++i) {
+                  is_synchronized &= (array[i] == number + (owner + 1) * i);
                 }
               }
 
-              SECTION("edge")
-              {
-                WeakEdgeArray<size_t> weak_edge_array{connectivity, 3};
-                auto edge_number = connectivity.edgeNumber();
+              REQUIRE(is_synchronized);
+            }
+          }
+
+          SECTION("edge")
+          {
+            WeakEdgeArray<size_t> weak_edge_array{connectivity, 3};
+            auto edge_number = connectivity.edgeNumber();
+
+            for (EdgeId i_edge = 0; i_edge < mesh_2d->numberOfEdges(); ++i_edge) {
+              Array array         = weak_edge_array[i_edge];
+              const size_t number = edge_number[i_edge];
+              for (size_t i = 0; i < array.size(); ++i) {
+                array[i] = number + (parallel::rank() + 1) * i;
+              }
+            }
+
+            EdgeArray<const size_t> edge_array{weak_edge_array};
+
+            REQUIRE(edge_array.connectivity_ptr() == weak_edge_array.connectivity_ptr());
+
+            {   // before synchronization
+              auto edge_owner    = connectivity.edgeOwner();
+              auto edge_is_owned = connectivity.edgeIsOwned();
 
-                for (EdgeId i_edge = 0; i_edge < mesh_2d->numberOfEdges(); ++i_edge) {
-                  Array array         = weak_edge_array[i_edge];
-                  const size_t number = edge_number[i_edge];
+              bool is_synchronized = (parallel::size() > 1);
+              bool is_valid        = true;
+              for (EdgeId i_edge = 0; i_edge < mesh_2d->numberOfEdges(); ++i_edge) {
+                Array array         = edge_array[i_edge];
+                const size_t number = edge_number[i_edge];
+                const size_t owner  = edge_owner[i_edge];
+                if (edge_is_owned[i_edge]) {
                   for (size_t i = 0; i < array.size(); ++i) {
-                    array[i] = number + (parallel::rank() + 1) * i;
+                    is_valid &= (array[i] == number + (owner + 1) * i);
                   }
-                }
-
-                EdgeArray<const size_t> edge_array{weak_edge_array};
-
-                REQUIRE(edge_array.connectivity_ptr() == weak_edge_array.connectivity_ptr());
-
-                {   // before synchronization
-                  auto edge_owner    = connectivity.edgeOwner();
-                  auto edge_is_owned = connectivity.edgeIsOwned();
-
-                  bool is_synchronized = (parallel::size() > 1);
-                  bool is_valid        = true;
-                  for (EdgeId i_edge = 0; i_edge < mesh_2d->numberOfEdges(); ++i_edge) {
-                    Array array         = edge_array[i_edge];
-                    const size_t number = edge_number[i_edge];
-                    const size_t owner  = edge_owner[i_edge];
-                    if (edge_is_owned[i_edge]) {
-                      for (size_t i = 0; i < array.size(); ++i) {
-                        is_valid &= (array[i] == number + (owner + 1) * i);
-                      }
-                    } else {
-                      for (size_t i = 0; i < array.size(); ++i) {
-                        is_synchronized &= (array[i] == number + (owner + 1) * i);
-                      }
-                    }
+                } else {
+                  for (size_t i = 0; i < array.size(); ++i) {
+                    is_synchronized &= (array[i] == number + (owner + 1) * i);
                   }
-
-                  REQUIRE(is_valid);
-                  REQUIRE(not is_synchronized);
                 }
+              }
 
-                synchronize(weak_edge_array);
+              REQUIRE(is_valid);
+              REQUIRE(not is_synchronized);
+            }
 
-                {   // after synchronization
-                  auto edge_owner = connectivity.edgeOwner();
+            synchronize(weak_edge_array);
 
-                  bool is_synchronized = true;
-                  for (EdgeId i_edge = 0; i_edge < mesh_2d->numberOfEdges(); ++i_edge) {
-                    Array array         = edge_array[i_edge];
-                    const size_t number = edge_number[i_edge];
-                    const size_t owner  = edge_owner[i_edge];
-                    for (size_t i = 0; i < array.size(); ++i) {
-                      is_synchronized &= (array[i] == number + (owner + 1) * i);
-                    }
-                  }
+            {   // after synchronization
+              auto edge_owner = connectivity.edgeOwner();
 
-                  REQUIRE(is_synchronized);
+              bool is_synchronized = true;
+              for (EdgeId i_edge = 0; i_edge < mesh_2d->numberOfEdges(); ++i_edge) {
+                Array array         = edge_array[i_edge];
+                const size_t number = edge_number[i_edge];
+                const size_t owner  = edge_owner[i_edge];
+                for (size_t i = 0; i < array.size(); ++i) {
+                  is_synchronized &= (array[i] == number + (owner + 1) * i);
                 }
               }
 
-              SECTION("face")
-              {
-                WeakFaceArray<size_t> weak_face_array{connectivity, 3};
-                auto face_number = connectivity.faceNumber();
+              REQUIRE(is_synchronized);
+            }
+          }
 
-                for (FaceId i_face = 0; i_face < mesh_2d->numberOfFaces(); ++i_face) {
-                  Array array         = weak_face_array[i_face];
-                  const size_t number = face_number[i_face];
+          SECTION("face")
+          {
+            WeakFaceArray<size_t> weak_face_array{connectivity, 3};
+            auto face_number = connectivity.faceNumber();
+
+            for (FaceId i_face = 0; i_face < mesh_2d->numberOfFaces(); ++i_face) {
+              Array array         = weak_face_array[i_face];
+              const size_t number = face_number[i_face];
+              for (size_t i = 0; i < array.size(); ++i) {
+                array[i] = number + (parallel::rank() + 1) * i;
+              }
+            }
+
+            FaceArray<const size_t> face_array{weak_face_array};
+
+            REQUIRE(face_array.connectivity_ptr() == weak_face_array.connectivity_ptr());
+
+            {   // before synchronization
+              auto face_owner    = connectivity.faceOwner();
+              auto face_is_owned = connectivity.faceIsOwned();
+
+              bool is_synchronized = (parallel::size() > 1);
+              bool is_valid        = true;
+              for (FaceId i_face = 0; i_face < mesh_2d->numberOfFaces(); ++i_face) {
+                Array array         = face_array[i_face];
+                const size_t number = face_number[i_face];
+                const size_t owner  = face_owner[i_face];
+                if (face_is_owned[i_face]) {
                   for (size_t i = 0; i < array.size(); ++i) {
-                    array[i] = number + (parallel::rank() + 1) * i;
+                    is_valid &= (array[i] == number + (owner + 1) * i);
                   }
-                }
-
-                FaceArray<const size_t> face_array{weak_face_array};
-
-                REQUIRE(face_array.connectivity_ptr() == weak_face_array.connectivity_ptr());
-
-                {   // before synchronization
-                  auto face_owner    = connectivity.faceOwner();
-                  auto face_is_owned = connectivity.faceIsOwned();
-
-                  bool is_synchronized = (parallel::size() > 1);
-                  bool is_valid        = true;
-                  for (FaceId i_face = 0; i_face < mesh_2d->numberOfFaces(); ++i_face) {
-                    Array array         = face_array[i_face];
-                    const size_t number = face_number[i_face];
-                    const size_t owner  = face_owner[i_face];
-                    if (face_is_owned[i_face]) {
-                      for (size_t i = 0; i < array.size(); ++i) {
-                        is_valid &= (array[i] == number + (owner + 1) * i);
-                      }
-                    } else {
-                      for (size_t i = 0; i < array.size(); ++i) {
-                        is_synchronized &= (array[i] == number + (owner + 1) * i);
-                      }
-                    }
+                } else {
+                  for (size_t i = 0; i < array.size(); ++i) {
+                    is_synchronized &= (array[i] == number + (owner + 1) * i);
                   }
-
-                  REQUIRE(is_valid);
-                  REQUIRE(not is_synchronized);
                 }
+              }
 
-                synchronize(weak_face_array);
+              REQUIRE(is_valid);
+              REQUIRE(not is_synchronized);
+            }
 
-                {   // after synchronization
-                  auto face_owner = connectivity.faceOwner();
+            synchronize(weak_face_array);
 
-                  bool is_synchronized = true;
-                  for (FaceId i_face = 0; i_face < mesh_2d->numberOfFaces(); ++i_face) {
-                    Array array         = face_array[i_face];
-                    const size_t number = face_number[i_face];
-                    const size_t owner  = face_owner[i_face];
-                    for (size_t i = 0; i < array.size(); ++i) {
-                      is_synchronized &= (array[i] == number + (owner + 1) * i);
-                    }
-                  }
+            {   // after synchronization
+              auto face_owner = connectivity.faceOwner();
 
-                  REQUIRE(is_synchronized);
+              bool is_synchronized = true;
+              for (FaceId i_face = 0; i_face < mesh_2d->numberOfFaces(); ++i_face) {
+                Array array         = face_array[i_face];
+                const size_t number = face_number[i_face];
+                const size_t owner  = face_owner[i_face];
+                for (size_t i = 0; i < array.size(); ++i) {
+                  is_synchronized &= (array[i] == number + (owner + 1) * i);
                 }
               }
 
-              SECTION("cell")
-              {
-                WeakCellArray<size_t> weak_cell_array{connectivity, 3};
-                auto cell_number = connectivity.cellNumber();
+              REQUIRE(is_synchronized);
+            }
+          }
 
-                for (CellId i_cell = 0; i_cell < mesh_2d->numberOfCells(); ++i_cell) {
-                  Array array         = weak_cell_array[i_cell];
-                  const size_t number = cell_number[i_cell];
+          SECTION("cell")
+          {
+            WeakCellArray<size_t> weak_cell_array{connectivity, 3};
+            auto cell_number = connectivity.cellNumber();
+
+            for (CellId i_cell = 0; i_cell < mesh_2d->numberOfCells(); ++i_cell) {
+              Array array         = weak_cell_array[i_cell];
+              const size_t number = cell_number[i_cell];
+              for (size_t i = 0; i < array.size(); ++i) {
+                array[i] = number + (parallel::rank() + 1) * i;
+              }
+            }
+
+            CellArray<const size_t> cell_array{weak_cell_array};
+
+            REQUIRE(cell_array.connectivity_ptr() == weak_cell_array.connectivity_ptr());
+
+            {   // before synchronization
+              auto cell_owner    = connectivity.cellOwner();
+              auto cell_is_owned = connectivity.cellIsOwned();
+
+              bool is_synchronized = (parallel::size() > 1);
+              bool is_valid        = true;
+              for (CellId i_cell = 0; i_cell < mesh_2d->numberOfCells(); ++i_cell) {
+                Array array         = cell_array[i_cell];
+                const size_t number = cell_number[i_cell];
+                const size_t owner  = cell_owner[i_cell];
+                if (cell_is_owned[i_cell]) {
                   for (size_t i = 0; i < array.size(); ++i) {
-                    array[i] = number + (parallel::rank() + 1) * i;
+                    is_valid &= (array[i] == number + (owner + 1) * i);
                   }
-                }
-
-                CellArray<const size_t> cell_array{weak_cell_array};
-
-                REQUIRE(cell_array.connectivity_ptr() == weak_cell_array.connectivity_ptr());
-
-                {   // before synchronization
-                  auto cell_owner    = connectivity.cellOwner();
-                  auto cell_is_owned = connectivity.cellIsOwned();
-
-                  bool is_synchronized = (parallel::size() > 1);
-                  bool is_valid        = true;
-                  for (CellId i_cell = 0; i_cell < mesh_2d->numberOfCells(); ++i_cell) {
-                    Array array         = cell_array[i_cell];
-                    const size_t number = cell_number[i_cell];
-                    const size_t owner  = cell_owner[i_cell];
-                    if (cell_is_owned[i_cell]) {
-                      for (size_t i = 0; i < array.size(); ++i) {
-                        is_valid &= (array[i] == number + (owner + 1) * i);
-                      }
-                    } else {
-                      for (size_t i = 0; i < array.size(); ++i) {
-                        is_synchronized &= (array[i] == number + (owner + 1) * i);
-                      }
-                    }
+                } else {
+                  for (size_t i = 0; i < array.size(); ++i) {
+                    is_synchronized &= (array[i] == number + (owner + 1) * i);
                   }
-
-                  REQUIRE(is_valid);
-                  REQUIRE(not is_synchronized);
                 }
+              }
 
-                synchronize(weak_cell_array);
+              REQUIRE(is_valid);
+              REQUIRE(not is_synchronized);
+            }
 
-                {   // after synchronization
-                  auto cell_owner = connectivity.cellOwner();
+            synchronize(weak_cell_array);
 
-                  bool is_synchronized = true;
-                  for (CellId i_cell = 0; i_cell < mesh_2d->numberOfCells(); ++i_cell) {
-                    Array array         = cell_array[i_cell];
-                    const size_t number = cell_number[i_cell];
-                    const size_t owner  = cell_owner[i_cell];
-                    for (size_t i = 0; i < array.size(); ++i) {
-                      is_synchronized &= (array[i] == number + (owner + 1) * i);
-                    }
-                  }
+            {   // after synchronization
+              auto cell_owner = connectivity.cellOwner();
 
-                  REQUIRE(is_synchronized);
+              bool is_synchronized = true;
+              for (CellId i_cell = 0; i_cell < mesh_2d->numberOfCells(); ++i_cell) {
+                Array array         = cell_array[i_cell];
+                const size_t number = cell_number[i_cell];
+                const size_t owner  = cell_owner[i_cell];
+                for (size_t i = 0; i < array.size(); ++i) {
+                  is_synchronized &= (array[i] == number + (owner + 1) * i);
                 }
               }
+
+              REQUIRE(is_synchronized);
             }
           }
         }
@@ -538,9 +537,11 @@ TEST_CASE("ItemArrayUtils", "[mesh]")
     {
       std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-      for (auto [section_name, mesh_3d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_3d = named_mesh.mesh();
+
           const Connectivity<3>& connectivity = mesh_3d->connectivity();
 
           SECTION("node")
diff --git a/tests/test_ItemValue.cpp b/tests/test_ItemValue.cpp
index a51f65f0b9c70af2b8d73554da8e52f8d2405926..84778227aa28e7a23267f9ec355822d257718c89 100644
--- a/tests/test_ItemValue.cpp
+++ b/tests/test_ItemValue.cpp
@@ -28,9 +28,11 @@ TEST_CASE("ItemValue", "[mesh]")
   {
     std::array mesh_list = MeshDataBaseForTests::get().all1DMeshes();
 
-    for (auto [section_name, mesh_1d] : mesh_list) {
-      SECTION(section_name)
+    for (auto named_mesh : mesh_list) {
+      SECTION(named_mesh.name())
       {
+        auto mesh_1d = named_mesh.mesh();
+
         const Connectivity<1>& connectivity = mesh_1d->connectivity();
 
         REQUIRE_NOTHROW(NodeValue<int>{connectivity});
@@ -59,9 +61,11 @@ TEST_CASE("ItemValue", "[mesh]")
   {
     std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
 
-    for (auto [section_name, mesh_2d] : mesh_list) {
-      SECTION(section_name)
+    for (auto named_mesh : mesh_list) {
+      SECTION(named_mesh.name())
       {
+        auto mesh_2d = named_mesh.mesh();
+
         const Connectivity<2>& connectivity = mesh_2d->connectivity();
 
         REQUIRE_NOTHROW(NodeValue<int>{connectivity});
@@ -86,9 +90,11 @@ TEST_CASE("ItemValue", "[mesh]")
   {
     std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-    for (auto [section_name, mesh_3d] : mesh_list) {
-      SECTION(section_name)
+    for (auto named_mesh : mesh_list) {
+      SECTION(named_mesh.name())
       {
+        auto mesh_3d = named_mesh.mesh();
+
         const Connectivity<3>& connectivity = mesh_3d->connectivity();
 
         REQUIRE_NOTHROW(NodeValue<int>{connectivity});
@@ -108,9 +114,11 @@ TEST_CASE("ItemValue", "[mesh]")
   {
     std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-    for (auto [section_name, mesh_3d] : mesh_list) {
-      SECTION(section_name)
+    for (auto named_mesh : mesh_list) {
+      SECTION(named_mesh.name())
       {
+        auto mesh_3d = named_mesh.mesh();
+
         const Connectivity<3>& connectivity = mesh_3d->connectivity();
 
         CellValue<size_t> cell_value{connectivity};
@@ -133,9 +141,11 @@ TEST_CASE("ItemValue", "[mesh]")
   {
     std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-    for (auto [section_name, mesh_3d] : mesh_list) {
-      SECTION(section_name)
+    for (auto named_mesh : mesh_list) {
+      SECTION(named_mesh.name())
       {
+        auto mesh_3d = named_mesh.mesh();
+
         const Connectivity<3>& connectivity = mesh_3d->connectivity();
 
         CellValue<int> cell_value{connectivity};
@@ -161,9 +171,11 @@ TEST_CASE("ItemValue", "[mesh]")
   {
     std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
 
-    for (auto [section_name, mesh_2d] : mesh_list) {
-      SECTION(section_name)
+    for (auto named_mesh : mesh_list) {
+      SECTION(named_mesh.name())
       {
+        auto mesh_2d = named_mesh.mesh();
+
         const Connectivity<2>& connectivity = mesh_2d->connectivity();
 
         WeakFaceValue<int> weak_face_value{connectivity};
@@ -199,9 +211,11 @@ TEST_CASE("ItemValue", "[mesh]")
     {
       std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-      for (auto [section_name, mesh_3d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_3d = named_mesh.mesh();
+
           const Connectivity<3>& connectivity = mesh_3d->connectivity();
 
           CellValue<int> cell_value{connectivity};
@@ -227,9 +241,11 @@ TEST_CASE("ItemValue", "[mesh]")
     {
       std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-      for (auto [section_name, mesh_3d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_3d = named_mesh.mesh();
+
           const Connectivity<3>& connectivity = mesh_3d->connectivity();
 
           CellValue<size_t> cell_value{connectivity};
@@ -244,16 +260,20 @@ TEST_CASE("ItemValue", "[mesh]")
     {
       std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
 
-      for (auto [section_name, mesh_2d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_2d = named_mesh.mesh();
+
           const Connectivity<2>& connectivity_2d = mesh_2d->connectivity();
 
           std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-          for (auto [section_name, mesh_3d] : mesh_list) {
-            SECTION(section_name)
+          for (auto named_mesh : mesh_list) {
+            SECTION(named_mesh.name())
             {
+              auto mesh_3d = named_mesh.mesh();
+
               const Connectivity<3>& connectivity_3d = mesh_3d->connectivity();
 
               CellValue<int> cell_2d_value{connectivity_2d};
diff --git a/tests/test_ItemValueUtils.cpp b/tests/test_ItemValueUtils.cpp
index b818aee299c51269d6b5710c884bfc6d202f135e..bee143e751de72affa1134998d8561a997bc7f12 100644
--- a/tests/test_ItemValueUtils.cpp
+++ b/tests/test_ItemValueUtils.cpp
@@ -19,9 +19,11 @@ TEST_CASE("ItemValueUtils", "[mesh]")
   {
     std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
 
-    for (auto [section_name, mesh_2d] : mesh_list) {
-      SECTION(section_name)
+    for (auto named_mesh : mesh_list) {
+      SECTION(named_mesh.name())
       {
+        auto mesh_2d = named_mesh.mesh();
+
         const Connectivity<2>& connectivity = mesh_2d->connectivity();
 
         WeakFaceValue<int> weak_face_value{connectivity};
@@ -65,9 +67,11 @@ TEST_CASE("ItemValueUtils", "[mesh]")
     {
       std::array mesh_list = MeshDataBaseForTests::get().all1DMeshes();
 
-      for (auto [section_name, mesh_1d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_1d = named_mesh.mesh();
+
           const Connectivity<1>& connectivity = mesh_1d->connectivity();
 
           CellValue<int> cell_value{connectivity};
@@ -90,9 +94,11 @@ TEST_CASE("ItemValueUtils", "[mesh]")
     {
       std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
 
-      for (auto [section_name, mesh_2d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_2d = named_mesh.mesh();
+
           const Connectivity<2>& connectivity = mesh_2d->connectivity();
 
           CellValue<int> cell_value{connectivity};
@@ -115,9 +121,11 @@ TEST_CASE("ItemValueUtils", "[mesh]")
     {
       std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-      for (auto [section_name, mesh_3d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_3d = named_mesh.mesh();
+
           const Connectivity<3>& connectivity = mesh_3d->connectivity();
 
           CellValue<int> cell_value{connectivity};
@@ -143,9 +151,11 @@ TEST_CASE("ItemValueUtils", "[mesh]")
     {
       std::array mesh_list = MeshDataBaseForTests::get().all1DMeshes();
 
-      for (auto [section_name, mesh_1d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_1d = named_mesh.mesh();
+
           const Connectivity<1>& connectivity = mesh_1d->connectivity();
 
           CellValue<size_t> cell_value{connectivity};
@@ -168,9 +178,11 @@ TEST_CASE("ItemValueUtils", "[mesh]")
     {
       std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
 
-      for (auto [section_name, mesh_2d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_2d = named_mesh.mesh();
+
           const Connectivity<2>& connectivity = mesh_2d->connectivity();
 
           CellValue<size_t> cell_value{connectivity};
@@ -193,9 +205,11 @@ TEST_CASE("ItemValueUtils", "[mesh]")
     {
       std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-      for (auto [section_name, mesh_3d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_3d = named_mesh.mesh();
+
           const Connectivity<3>& connectivity = mesh_3d->connectivity();
 
           CellValue<size_t> cell_value{connectivity};
@@ -221,9 +235,11 @@ TEST_CASE("ItemValueUtils", "[mesh]")
     {
       std::array mesh_list = MeshDataBaseForTests::get().all1DMeshes();
 
-      for (auto [section_name, mesh_1d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_1d = named_mesh.mesh();
+
           const Connectivity<1>& connectivity = mesh_1d->connectivity();
 
           CellValue<size_t> cell_value{connectivity};
@@ -248,9 +264,11 @@ TEST_CASE("ItemValueUtils", "[mesh]")
     {
       std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
 
-      for (auto [section_name, mesh_2d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_2d = named_mesh.mesh();
+
           const Connectivity<2>& connectivity = mesh_2d->connectivity();
 
           FaceValue<size_t> face_value{connectivity};
@@ -275,9 +293,11 @@ TEST_CASE("ItemValueUtils", "[mesh]")
     {
       std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-      for (auto [section_name, mesh_3d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_3d = named_mesh.mesh();
+
           const Connectivity<3>& connectivity = mesh_3d->connectivity();
 
           NodeValue<size_t> node_value{connectivity};
diff --git a/tests/test_SubItemArrayPerItem.cpp b/tests/test_SubItemArrayPerItem.cpp
index 01b1b721913d57f80d51efeab2b5f74f62f13c38..c72f98b76de01f6562aac21c5cc008716606a0a5 100644
--- a/tests/test_SubItemArrayPerItem.cpp
+++ b/tests/test_SubItemArrayPerItem.cpp
@@ -66,9 +66,11 @@ TEST_CASE("SubItemArrayPerItem", "[mesh]")
     {
       std::array mesh_list = MeshDataBaseForTests::get().all1DMeshes();
 
-      for (auto [section_name, mesh_1d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_1d = named_mesh.mesh();
+
           const Connectivity<1>& connectivity = mesh_1d->connectivity();
 
           SECTION("per cell")
@@ -187,9 +189,11 @@ TEST_CASE("SubItemArrayPerItem", "[mesh]")
     {
       std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
 
-      for (auto [section_name, mesh_2d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_2d = named_mesh.mesh();
+
           const Connectivity<2>& connectivity = mesh_2d->connectivity();
 
           SECTION("per cell")
@@ -351,9 +355,11 @@ TEST_CASE("SubItemArrayPerItem", "[mesh]")
     {
       std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-      for (auto [section_name, mesh_3d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_3d = named_mesh.mesh();
+
           const Connectivity<3>& connectivity = mesh_3d->connectivity();
 
           SECTION("per cell")
@@ -546,9 +552,11 @@ TEST_CASE("SubItemArrayPerItem", "[mesh]")
     {
       std::array mesh_list = MeshDataBaseForTests::get().all1DMeshes();
 
-      for (auto [section_name, mesh_1d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_1d = named_mesh.mesh();
+
           const Connectivity<1>& connectivity = mesh_1d->connectivity();
 
           EdgeArrayPerCell<size_t> edge_arrays_per_cell{connectivity, 3};
@@ -617,9 +625,11 @@ TEST_CASE("SubItemArrayPerItem", "[mesh]")
     {
       std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
 
-      for (auto [section_name, mesh_2d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_2d = named_mesh.mesh();
+
           const Connectivity<2>& connectivity = mesh_2d->connectivity();
 
           CellArrayPerFace<size_t> cell_arrays_per_face{connectivity, 3};
@@ -687,9 +697,11 @@ TEST_CASE("SubItemArrayPerItem", "[mesh]")
     {
       std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-      for (auto [section_name, mesh_3d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_3d = named_mesh.mesh();
+
           const Connectivity<3>& connectivity = mesh_3d->connectivity();
 
           FaceArrayPerNode<size_t> face_arrays_per_node{connectivity, 3};
@@ -757,9 +769,11 @@ TEST_CASE("SubItemArrayPerItem", "[mesh]")
   {
     std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-    for (auto [section_name, mesh_3d] : mesh_list) {
-      SECTION(section_name)
+    for (auto named_mesh : mesh_list) {
+      SECTION(named_mesh.name())
       {
+        auto mesh_3d = named_mesh.mesh();
+
         const Connectivity<3>& connectivity = mesh_3d->connectivity();
 
         SECTION("classic")
@@ -864,9 +878,11 @@ TEST_CASE("SubItemArrayPerItem", "[mesh]")
   {
     std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
 
-    for (auto [section_name, mesh_2d] : mesh_list) {
-      SECTION(section_name)
+    for (auto named_mesh : mesh_list) {
+      SECTION(named_mesh.name())
       {
+        auto mesh_2d = named_mesh.mesh();
+
         const Connectivity<2>& connectivity = mesh_2d->connectivity();
 
         WeakFaceArrayPerCell<int> weak_face_array_per_cell{connectivity, 3};
@@ -941,9 +957,11 @@ TEST_CASE("SubItemArrayPerItem", "[mesh]")
     {
       std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-      for (auto [section_name, mesh_3d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_3d = named_mesh.mesh();
+
           const Connectivity<3>& connectivity = mesh_3d->connectivity();
 
           CellArrayPerFace<int> cell_array_per_face{connectivity, 3};
diff --git a/tests/test_SubItemValuePerItem.cpp b/tests/test_SubItemValuePerItem.cpp
index eeae28a821338687d0923669dc48817dc8e73060..5eaadd94d88d07d2c802e9da867ab5ae2442aa5a 100644
--- a/tests/test_SubItemValuePerItem.cpp
+++ b/tests/test_SubItemValuePerItem.cpp
@@ -66,9 +66,11 @@ TEST_CASE("SubItemValuePerItem", "[mesh]")
     {
       std::array mesh_list = MeshDataBaseForTests::get().all1DMeshes();
 
-      for (auto [section_name, mesh_1d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_1d = named_mesh.mesh();
+
           const Connectivity<1>& connectivity = mesh_1d->connectivity();
 
           SECTION("per cell")
@@ -180,9 +182,11 @@ TEST_CASE("SubItemValuePerItem", "[mesh]")
     {
       std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
 
-      for (auto [section_name, mesh_2d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_2d = named_mesh.mesh();
+
           const Connectivity<2>& connectivity = mesh_2d->connectivity();
 
           SECTION("per cell")
@@ -334,9 +338,11 @@ TEST_CASE("SubItemValuePerItem", "[mesh]")
     {
       std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-      for (auto [section_name, mesh_3d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_3d = named_mesh.mesh();
+
           const Connectivity<3>& connectivity = mesh_3d->connectivity();
 
           SECTION("per cell")
@@ -517,9 +523,11 @@ TEST_CASE("SubItemValuePerItem", "[mesh]")
     {
       std::array mesh_list = MeshDataBaseForTests::get().all1DMeshes();
 
-      for (auto [section_name, mesh_1d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_1d = named_mesh.mesh();
+
           const Connectivity<1>& connectivity = mesh_1d->connectivity();
 
           EdgeValuePerCell<size_t> edge_values_per_cell{connectivity};
@@ -560,9 +568,11 @@ TEST_CASE("SubItemValuePerItem", "[mesh]")
     {
       std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
 
-      for (auto [section_name, mesh_2d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_2d = named_mesh.mesh();
+
           const Connectivity<2>& connectivity = mesh_2d->connectivity();
 
           CellValuePerFace<size_t> cell_values_per_face{connectivity};
@@ -602,9 +612,11 @@ TEST_CASE("SubItemValuePerItem", "[mesh]")
     {
       std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-      for (auto [section_name, mesh_3d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_3d = named_mesh.mesh();
+
           const Connectivity<3>& connectivity = mesh_3d->connectivity();
 
           FaceValuePerNode<size_t> face_values_per_node{connectivity};
@@ -646,9 +658,11 @@ TEST_CASE("SubItemValuePerItem", "[mesh]")
   {
     std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-    for (auto [section_name, mesh_3d] : mesh_list) {
-      SECTION(section_name)
+    for (auto named_mesh : mesh_list) {
+      SECTION(named_mesh.name())
       {
+        auto mesh_3d = named_mesh.mesh();
+
         const Connectivity<3>& connectivity = mesh_3d->connectivity();
 
         SECTION("classic")
@@ -742,9 +756,11 @@ TEST_CASE("SubItemValuePerItem", "[mesh]")
   {
     std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
 
-    for (auto [section_name, mesh_2d] : mesh_list) {
-      SECTION(section_name)
+    for (auto named_mesh : mesh_list) {
+      SECTION(named_mesh.name())
       {
+        auto mesh_2d = named_mesh.mesh();
+
         const Connectivity<2>& connectivity = mesh_2d->connectivity();
 
         WeakFaceValuePerCell<int> weak_face_value_per_cell{connectivity};
@@ -808,9 +824,11 @@ TEST_CASE("SubItemValuePerItem", "[mesh]")
     {
       std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
 
-      for (auto [section_name, mesh_3d] : mesh_list) {
-        SECTION(section_name)
+      for (auto named_mesh : mesh_list) {
+        SECTION(named_mesh.name())
         {
+          auto mesh_3d = named_mesh.mesh();
+
           const Connectivity<3>& connectivity = mesh_3d->connectivity();
 
           CellValuePerFace<int> cell_value_per_face{connectivity};