diff --git a/src/mesh/DiamondDualMeshBuilder.cpp b/src/mesh/DiamondDualMeshBuilder.cpp
index c591ca59a1a3f9c28e46dfcc3d88440d2f362808..6b834679a3dd2adf6d3941072e0277a1511d223f 100644
--- a/src/mesh/DiamondDualMeshBuilder.cpp
+++ b/src/mesh/DiamondDualMeshBuilder.cpp
@@ -45,7 +45,7 @@ DiamondDualMeshBuilder::DiamondDualMeshBuilder(const std::shared_ptr<const MeshV
 {
   std::visit(
     [&](auto&& p_mesh) {
-      using MeshType = std::decay_t<decltype(p_mesh)>::element_type;
+      using MeshType = typename std::decay_t<decltype(p_mesh)>::element_type;
       if constexpr (is_polygonal_mesh<MeshType>) {
         if constexpr (MeshType::Dimension > 1) {
           this->_buildDualDiamondMeshFrom(*p_mesh);
diff --git a/src/mesh/MedianDualMeshBuilder.cpp b/src/mesh/MedianDualMeshBuilder.cpp
index 095c44225ddf5f4666e8100d1f00e66f9c12a5c2..0dd61cfa7f45a47a3e17f89b2208f6b299539b0e 100644
--- a/src/mesh/MedianDualMeshBuilder.cpp
+++ b/src/mesh/MedianDualMeshBuilder.cpp
@@ -46,7 +46,7 @@ MedianDualMeshBuilder::MedianDualMeshBuilder(const std::shared_ptr<const MeshVar
 {
   std::visit(
     [&](auto&& p_mesh) {
-      using MeshType = std::decay_t<decltype(p_mesh)>::element_type;
+      using MeshType = typename std::decay_t<decltype(p_mesh)>::element_type;
       if constexpr (is_polygonal_mesh<MeshType>) {
         if constexpr (MeshType::Dimension > 1) {
           this->_buildMedianDualMeshFrom(*p_mesh);
diff --git a/src/mesh/MeshRandomizer.cpp b/src/mesh/MeshRandomizer.cpp
index 78c397c2e53306cd245a3a75a5700523544d57bf..57b826dff5ba409e69816b352c572b67547217e1 100644
--- a/src/mesh/MeshRandomizer.cpp
+++ b/src/mesh/MeshRandomizer.cpp
@@ -368,7 +368,7 @@ MeshRandomizerHandler::getRandomizedMesh(
 {
   return std::visit(
     [&](auto&& mesh) {
-      using MeshType = std::decay_t<decltype(mesh)>::element_type;
+      using MeshType = typename std::decay_t<decltype(mesh)>::element_type;
       if constexpr (is_polygonal_mesh<MeshType>) {
         MeshRandomizer randomizer(*mesh, bc_descriptor_list);
         return randomizer.getRandomizedMesh();
@@ -387,7 +387,7 @@ MeshRandomizerHandler::getRandomizedMesh(
 {
   return std::visit(
     [&](auto&& mesh) {
-      using MeshType = std::decay_t<decltype(mesh)>::element_type;
+      using MeshType = typename std::decay_t<decltype(mesh)>::element_type;
       if constexpr (is_polygonal_mesh<MeshType>) {
         MeshRandomizer randomizer(*mesh, bc_descriptor_list);
         return randomizer.getRandomizedMesh(function_symbol_id);
diff --git a/src/mesh/MeshRelaxer.cpp b/src/mesh/MeshRelaxer.cpp
index 4ced5b3852d2c4fe5a84599201d3cf1ff01726df..16cbaa3ba8add4376e7833ed64321795df943e87 100644
--- a/src/mesh/MeshRelaxer.cpp
+++ b/src/mesh/MeshRelaxer.cpp
@@ -38,8 +38,8 @@ MeshRelaxer::relax(const std::shared_ptr<const MeshVariant>& p_source_mesh,
 {
   return std::visit(
     [&](auto&& source_mesh, auto&& destination_mesh) -> std::shared_ptr<const MeshVariant> {
-      using SourceMeshType      = std::decay_t<decltype(source_mesh)>::element_type;
-      using DestinationMeshType = std::decay_t<decltype(destination_mesh)>::element_type;
+      using SourceMeshType      = typename std::decay_t<decltype(source_mesh)>::element_type;
+      using DestinationMeshType = typename std::decay_t<decltype(destination_mesh)>::element_type;
       if constexpr (std::is_same_v<SourceMeshType, DestinationMeshType>) {
         return this->_relax(*source_mesh, *destination_mesh, theta);
       } else {
diff --git a/src/mesh/MeshTransformer.cpp b/src/mesh/MeshTransformer.cpp
index e524c0b2da07ccf7c713e42d35c089b3175bcd7f..5fc2e3e948e034d1378a8964bc50566c96461841 100644
--- a/src/mesh/MeshTransformer.cpp
+++ b/src/mesh/MeshTransformer.cpp
@@ -30,7 +30,7 @@ MeshTransformer::transform(const FunctionSymbolId& function_id, std::shared_ptr<
 {
   return std::visit(
     [&](auto&& mesh) {
-      using MeshType             = std::decay_t<decltype(mesh)>::element_type;
+      using MeshType             = typename std::decay_t<decltype(mesh)>::element_type;
       constexpr size_t Dimension = MeshType::Dimension;
       using TransformT           = TinyVector<Dimension>(TinyVector<Dimension>);
 
diff --git a/tests/test_ParallelChecker_read.cpp b/tests/test_ParallelChecker_read.cpp
index 02fb226b67a97978c423585e77e0e80adfbe0a62..b7996db7bc955107c260aa93ae96dffe4356184f 100644
--- a/tests/test_ParallelChecker_read.cpp
+++ b/tests/test_ParallelChecker_read.cpp
@@ -2046,7 +2046,7 @@ TEST_CASE("ParallelChecker_read", "[dev]")
   REQUIRE_NOTHROW(ParallelChecker::instance().setMode(ParallelChecker::Mode::read));
   REQUIRE_NOTHROW(not ParallelChecker::instance().isWriting());
 
-  auto mesh = MeshDataBaseForTests::get().unordered1DMesh();
+  auto mesh = MeshDataBaseForTests::get().unordered1DMesh()->get<Mesh<Connectivity<1>>>();
 
   const Connectivity<1>& connectivity = mesh->connectivity();
 
diff --git a/tests/test_ParallelChecker_write.cpp b/tests/test_ParallelChecker_write.cpp
index 0d08696adffb9975fa0d95026581c667d3583b8b..d9237c7daa4fb8b96b57498085ab4bdea128b028 100644
--- a/tests/test_ParallelChecker_write.cpp
+++ b/tests/test_ParallelChecker_write.cpp
@@ -620,7 +620,7 @@ TEST_CASE("ParallelChecker_write", "[dev]")
   REQUIRE_NOTHROW(ParallelChecker::instance().setMode(ParallelChecker::Mode::automatic));
   REQUIRE_NOTHROW(ParallelChecker::instance().isWriting() == (parallel::size() == 1));
 
-  auto mesh = MeshDataBaseForTests::get().unordered1DMesh();
+  auto mesh = MeshDataBaseForTests::get().unordered1DMesh()->get<Mesh<Connectivity<1>>>();
 
   const Connectivity<1>& connectivity = mesh->connectivity();