From cf40414235958a89dda8a58cb9bcb173bde0b718 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jakub=20Klinkovsk=C3=BD?= <klinkovsky@mmg.fjfi.cvut.cz>
Date: Mon, 27 Dec 2021 11:47:17 +0100
Subject: [PATCH] clang-tidy: use 'using' instead of 'typedef'
 [modernize-use-using]

See https://clang.llvm.org/extra/clang-tidy/checks/modernize-use-using.html
---
 src/Benchmarks/BLAS/VectorOperations.h        |   4 +-
 .../HeatEquation/BenchmarkLaplace.h           |  36 ++--
 .../DirichletBoundaryConditions.h             |  19 +-
 .../HeatEquationBenchmarkProblem.h            |  19 +-
 .../HeatEquationBenchmarkProblem_impl.h       |   2 +-
 .../HeatEquation/HeatEquationBenchmarkRhs.h   |   5 +-
 src/Benchmarks/HeatEquation/TestGridEntity.h  |  24 ++-
 .../HeatEquation/Tuning/ExplicitUpdater.h     |  36 ++--
 .../HeatEquation/Tuning/GridTraverser.h       |  30 ++-
 .../HeatEquation/Tuning/SimpleCell.h          |  20 +-
 .../HeatEquation/Tuning/Traverser_Grid2D.h    |   6 +-
 .../tnl-benchmark-heat-equation.h             |  33 ++--
 .../tnl-benchmark-simple-heat-equation.h      |   4 +-
 src/Benchmarks/ODESolvers/Euler.h             |  13 +-
 src/Benchmarks/ODESolvers/Merson.h            |  13 +-
 .../Algorithms/Segments/detail/CheckLambdas.h |   4 +-
 src/TNL/Functions/Analytic/Blob.h             |  14 +-
 src/TNL/Functions/Analytic/Constant.h         |   4 +-
 src/TNL/Functions/Analytic/Cylinder.h         |  14 +-
 src/TNL/Functions/Analytic/ExpBump.h          |  14 +-
 src/TNL/Functions/Analytic/Flowerpot.h        |  14 +-
 src/TNL/Functions/Analytic/Paraboloid.h       |  12 +-
 src/TNL/Functions/Analytic/ParaboloidSDF.h    |  12 +-
 src/TNL/Functions/Analytic/PseudoSquare.h     |  14 +-
 src/TNL/Functions/Analytic/SinBumps.h         |  16 +-
 src/TNL/Functions/Analytic/SinBumpsSDF.h      |  16 +-
 src/TNL/Functions/Analytic/SinWave.h          |  12 +-
 src/TNL/Functions/Analytic/SinWaveSDF.h       |  12 +-
 src/TNL/Functions/Analytic/Twins.h            |  14 +-
 src/TNL/Functions/Analytic/VectorNorm.h       |  10 +-
 src/TNL/Functions/Domain.h                    |   2 +-
 src/TNL/Functions/FunctionAdapter.h           |  28 +--
 src/TNL/Functions/MeshFunctionEvaluator.h     |  14 +-
 .../Functions/MeshFunctionEvaluator_impl.h    |   8 +-
 src/TNL/Functions/MeshFunctionNormGetter.h    |  28 +--
 src/TNL/Functions/TestFunction.h              |   4 +-
 src/TNL/Functions/TestFunction_impl.h         | 182 +++++++++---------
 src/TNL/Images/DicomSeries.h                  |   2 +-
 src/TNL/Images/DicomSeries_impl.h             |   2 +-
 src/TNL/Images/Image.h                        |   2 +-
 src/TNL/Images/JPEGImage.h                    |   2 +-
 src/TNL/Images/JPEGImage_impl.h               |   6 +-
 src/TNL/Images/PGMImage.h                     |   2 +-
 src/TNL/Images/PGMImage_impl.h                |   6 +-
 src/TNL/Images/PNGImage_impl.h                |   6 +-
 src/TNL/Matrices/MatrixReader.h               |   6 +-
 src/TNL/Matrices/MatrixSetter.h               |  18 +-
 .../DistributedMeshes/CopyEntitiesHelper.h    |  18 +-
 .../DistributedGridSynchronizer.h             |   6 +-
 src/TNL/Meshes/DummyMesh.h                    |   6 +-
 .../GridDetails/BoundaryGridEntityChecker.h   |  36 ++--
 src/TNL/Meshes/GridDetails/Grid1D.h           |   8 +-
 src/TNL/Meshes/GridDetails/Grid2D.h           |  18 +-
 src/TNL/Meshes/GridDetails/Grid3D.h           |  20 +-
 .../GridDetails/GridEntityCenterGetter.h      |  48 ++---
 .../GridDetails/GridEntityGetter_impl.h       |  48 ++---
 .../GridDetails/GridEntityMeasureGetter.h     |  14 +-
 .../Meshes/GridDetails/GridEntityTopology.h   |   6 +-
 src/TNL/Meshes/GridDetails/GridEntity_impl.h  |   8 +-
 src/TNL/Meshes/GridDetails/GridTraverser.h    |  72 +++----
 .../GridDetails/NeighborGridEntitiesStorage.h |   8 +-
 .../NeighborGridEntityGetter1D_impl.h         |  84 ++++----
 .../NeighborGridEntityGetter2D_impl.h         |  90 ++++-----
 .../NeighborGridEntityGetter3D_impl.h         | 126 ++++++------
 src/TNL/Meshes/GridEntity.h                   |  60 +++---
 src/TNL/Meshes/Topologies/Edge.h              |   2 +-
 src/TNL/Meshes/Topologies/Hexahedron.h        |   6 +-
 src/TNL/Meshes/Topologies/Quadrangle.h        |   4 +-
 src/TNL/Meshes/Topologies/Simplex.h           |   4 +-
 src/TNL/Meshes/Topologies/Tetrahedron.h       |   6 +-
 src/TNL/Meshes/Topologies/Triangle.h          |   4 +-
 src/TNL/Operators/Analytic/Heaviside.h        |   4 +-
 src/TNL/Operators/Analytic/Identity.h         |   4 +-
 src/TNL/Operators/Analytic/SmoothHeaviside.h  |   4 +-
 .../Operators/DirichletBoundaryConditions.h   |  18 +-
 src/TNL/Operators/FiniteDifferences.h         |  30 +--
 src/TNL/Operators/NeumannBoundaryConditions.h |  56 +++---
 src/TNL/Operators/Operator.h                  |  14 +-
 src/TNL/Pointers/SmartPointersRegister.h      |   2 +-
 src/TNL/Problems/PDEProblem.h                 |   2 +-
 src/TNL/Problems/Problem.h                    |   6 +-
 src/TNL/Solvers/PDE/ExplicitUpdater.h         |  28 +--
 src/TNL/Solvers/PDE/LinearSystemAssembler.h   |  24 +--
 src/TNL/Solvers/PDE/SemiImplicitTimeStepper.h |  16 +-
 src/TNL/Solvers/PDE/TimeDependentPDESolver.h  |  14 +-
 .../Solvers/PDE/TimeIndependentPDESolver.h    |  12 +-
 src/TNL/Solvers/SolverStarter.hpp             |   4 +-
 src/TNL/TypeTraits.h                          |  12 +-
 src/Tools/tnl-dicom-reader.cpp                |   2 +-
 src/Tools/tnl-diff.h                          |   4 +-
 src/Tools/tnl-grid-setup.h                    |  18 +-
 src/Tools/tnl-init.h                          |   8 +-
 92 files changed, 867 insertions(+), 881 deletions(-)

diff --git a/src/Benchmarks/BLAS/VectorOperations.h b/src/Benchmarks/BLAS/VectorOperations.h
index 43c3b9c885..dfe8bd2668 100644
--- a/src/Benchmarks/BLAS/VectorOperations.h
+++ b/src/Benchmarks/BLAS/VectorOperations.h
@@ -22,7 +22,7 @@ struct VectorOperations< Devices::Host >
                           const Scalar1 alpha,
                           const Scalar2 thisMultiplicator = 1.0 )
    {
-      typedef typename Vector1::IndexType Index;
+      using Index = typename Vector1::IndexType;
 
       TNL_ASSERT_GT( x.getSize(), 0, "Vector size must be positive." );
       TNL_ASSERT_EQ( x.getSize(), y.getSize(), "The vector sizes must be the same." );
@@ -51,7 +51,7 @@ struct VectorOperations< Devices::Host >
                            const Scalar2 multiplicator2,
                            const Scalar3 thisMultiplicator = 1.0 )
    {
-      typedef typename Vector1::IndexType Index;
+      using Index = typename Vector1::IndexType;
 
       TNL_ASSERT_GT( v.getSize(), 0, "Vector size must be positive." );
       TNL_ASSERT_EQ( v.getSize(), v1.getSize(), "The vector sizes must be the same." );
diff --git a/src/Benchmarks/HeatEquation/BenchmarkLaplace.h b/src/Benchmarks/HeatEquation/BenchmarkLaplace.h
index 0c2fd92e30..96a8d89d04 100644
--- a/src/Benchmarks/HeatEquation/BenchmarkLaplace.h
+++ b/src/Benchmarks/HeatEquation/BenchmarkLaplace.h
@@ -25,12 +25,12 @@ class BenchmarkLaplace< Meshes::Grid< 1, MeshReal, Device, MeshIndex >, Real, In
                               Index >
 {
    public:
-      typedef Meshes::Grid< 1, MeshReal, Device, MeshIndex > MeshType;
-      typedef typename MeshType::CoordinatesType CoordinatesType;
-      typedef Real RealType;
-      typedef Device DeviceType;
-      typedef Index IndexType;
-      typedef Functions::MeshFunction< MeshType > MeshFunctionType;
+      using MeshType = Meshes::Grid< 1, MeshReal, Device, MeshIndex >;
+      using CoordinatesType = typename MeshType::CoordinatesType;
+      using RealType = Real;
+      using DeviceType = Device;
+      using IndexType = Index;
+      using MeshFunctionType = Functions::MeshFunction< MeshType >;
       enum { Dimension = MeshType::getMeshDimension() };
 
       template< typename MeshFunction, typename MeshEntity >
@@ -71,12 +71,12 @@ class BenchmarkLaplace< Meshes::Grid< 2,MeshReal, Device, MeshIndex >, Real, Ind
                               Index >
 {
    public:
-      typedef Meshes::Grid< 2, MeshReal, Device, MeshIndex > MeshType;
-      typedef typename MeshType::CoordinatesType CoordinatesType;
-      typedef Real RealType;
-      typedef Device DeviceType;
-      typedef Index IndexType;
-      typedef Functions::MeshFunction< MeshType > MeshFunctionType;
+      using MeshType = Meshes::Grid< 2, MeshReal, Device, MeshIndex >;
+      using CoordinatesType = typename MeshType::CoordinatesType;
+      using RealType = Real;
+      using DeviceType = Device;
+      using IndexType = Index;
+      using MeshFunctionType = Functions::MeshFunction< MeshType >;
       enum { Dimension = MeshType::getMeshDimension() };
 
       template< typename MeshFunction, typename MeshEntity >
@@ -132,12 +132,12 @@ class BenchmarkLaplace< Meshes::Grid< 3,MeshReal, Device, MeshIndex >, Real, Ind
                               Index >
 {
    public:
-      typedef Meshes::Grid< 3, MeshReal, Device, MeshIndex > MeshType;
-      typedef typename MeshType::CoordinatesType CoordinatesType;
-      typedef Real RealType;
-      typedef Device DeviceType;
-      typedef Index IndexType;
-      typedef Functions::MeshFunction< MeshType > MeshFunctionType;
+      using MeshType = Meshes::Grid< 3, MeshReal, Device, MeshIndex >;
+      using CoordinatesType = typename MeshType::CoordinatesType;
+      using RealType = Real;
+      using DeviceType = Device;
+      using IndexType = Index;
+      using MeshFunctionType = Functions::MeshFunction< MeshType >;
       enum { Dimension = MeshType::getMeshDimension() };
 
       template< typename MeshFunction, typename MeshEntity >
diff --git a/src/Benchmarks/HeatEquation/DirichletBoundaryConditions.h b/src/Benchmarks/HeatEquation/DirichletBoundaryConditions.h
index 393a571e76..23001e9289 100644
--- a/src/Benchmarks/HeatEquation/DirichletBoundaryConditions.h
+++ b/src/Benchmarks/HeatEquation/DirichletBoundaryConditions.h
@@ -21,16 +21,15 @@ class DirichletBoundaryConditions
                               Index >
 {
    public:
-
-      typedef Mesh MeshType;
-      typedef Function FunctionType;
-      typedef Real RealType;
-      typedef typename MeshType::DeviceType DeviceType;
-      typedef Index IndexType;
-      
-      typedef Pointers::SharedPointer<  Mesh > MeshPointer;
-      typedef Containers::Vector< RealType, DeviceType, IndexType> DofVectorType;
-      typedef typename MeshType::PointType PointType;
+      using MeshType = Mesh;
+      using FunctionType = Function;
+      using RealType = Real;
+      using DeviceType = typename MeshType::DeviceType;
+      using IndexType = Index;
+
+      using MeshPointer = Pointers::SharedPointer< Mesh >;
+      using DofVectorType = Containers::Vector< RealType, DeviceType, IndexType >;
+      using PointType = typename MeshType::PointType;
 
       static constexpr int getMeshDimension() { return MeshType::getMeshDimension(); }
 
diff --git a/src/Benchmarks/HeatEquation/HeatEquationBenchmarkProblem.h b/src/Benchmarks/HeatEquation/HeatEquationBenchmarkProblem.h
index 6389161cc8..f4286f8b4f 100644
--- a/src/Benchmarks/HeatEquation/HeatEquationBenchmarkProblem.h
+++ b/src/Benchmarks/HeatEquation/HeatEquationBenchmarkProblem.h
@@ -20,16 +20,15 @@ class HeatEquationBenchmarkProblem:
                       typename DifferentialOperator::IndexType >
 {
    public:
-
-      typedef typename DifferentialOperator::RealType RealType;
-      typedef typename Mesh::DeviceType DeviceType;
-      typedef typename DifferentialOperator::IndexType IndexType;
-      typedef Functions::MeshFunctionView< Mesh > MeshFunctionViewType;
-      typedef Pointers::SharedPointer< MeshFunctionViewType, DeviceType > MeshFunctionViewPointer;
-      typedef PDEProblem< Mesh, RealType, DeviceType, IndexType > BaseType;
-      typedef Pointers::SharedPointer< DifferentialOperator > DifferentialOperatorPointer;
-      typedef Pointers::SharedPointer< BoundaryCondition > BoundaryConditionPointer;
-      typedef Pointers::SharedPointer< RightHandSide, DeviceType > RightHandSidePointer;
+      using RealType = typename DifferentialOperator::RealType;
+      using DeviceType = typename Mesh::DeviceType;
+      using IndexType = typename DifferentialOperator::IndexType;
+      using MeshFunctionViewType = Functions::MeshFunctionView< Mesh >;
+      using MeshFunctionViewPointer = Pointers::SharedPointer< MeshFunctionViewType, DeviceType >;
+      using BaseType = PDEProblem< Mesh, RealType, DeviceType, IndexType >;
+      using DifferentialOperatorPointer = Pointers::SharedPointer< DifferentialOperator >;
+      using BoundaryConditionPointer = Pointers::SharedPointer< BoundaryCondition >;
+      using RightHandSidePointer = Pointers::SharedPointer< RightHandSide, DeviceType >;
 
       using typename BaseType::MeshType;
       using typename BaseType::MeshPointer;
diff --git a/src/Benchmarks/HeatEquation/HeatEquationBenchmarkProblem_impl.h b/src/Benchmarks/HeatEquation/HeatEquationBenchmarkProblem_impl.h
index 9283a8c026..4647fa28eb 100644
--- a/src/Benchmarks/HeatEquation/HeatEquationBenchmarkProblem_impl.h
+++ b/src/Benchmarks/HeatEquation/HeatEquationBenchmarkProblem_impl.h
@@ -144,7 +144,7 @@ HeatEquationBenchmarkProblem< Mesh, BoundaryCondition, RightHandSide, Differenti
 setupLinearSystem( Matrix& matrix )
 {
    const IndexType dofs = this->getDofs();
-   typedef typename Matrix::RowsCapacitiesType RowsCapacitiesTypeType;
+   using RowsCapacitiesTypeType = typename Matrix::RowsCapacitiesType;
    RowsCapacitiesTypeType rowLengths;
    if( ! rowLengths.setSize( dofs ) )
       return false;
diff --git a/src/Benchmarks/HeatEquation/HeatEquationBenchmarkRhs.h b/src/Benchmarks/HeatEquation/HeatEquationBenchmarkRhs.h
index b2fef66caa..ce12f61ce5 100644
--- a/src/Benchmarks/HeatEquation/HeatEquationBenchmarkRhs.h
+++ b/src/Benchmarks/HeatEquation/HeatEquationBenchmarkRhs.h
@@ -5,9 +5,8 @@ template< typename Mesh, typename Real >class HeatEquationBenchmarkRhs
   : public Functions::Domain< Mesh::getMeshDimension(), Functions::MeshDomain > 
  {
    public:
-
-      typedef Mesh MeshType;
-      typedef Real RealType;
+      using MeshType = Mesh;
+      using RealType = Real;
 
       bool setup( const Config::ParameterContainer& parameters,
                   const String& prefix = "" )
diff --git a/src/Benchmarks/HeatEquation/TestGridEntity.h b/src/Benchmarks/HeatEquation/TestGridEntity.h
index 747a0d2665..41acf11f4d 100644
--- a/src/Benchmarks/HeatEquation/TestGridEntity.h
+++ b/src/Benchmarks/HeatEquation/TestGridEntity.h
@@ -41,13 +41,12 @@ template< int Dimension,
 class TestGridEntity< Meshes::Grid< Dimension, Real, Device, Index >, Dimension >
 {
    public:
-      
-      typedef Meshes::Grid< Dimension, Real, Device, Index > GridType;
-      typedef GridType MeshType;
-      typedef typename GridType::RealType RealType;
-      typedef typename GridType::IndexType IndexType;
-      typedef typename GridType::CoordinatesType CoordinatesType;
-      typedef typename GridType::PointType PointType;
+      using GridType = Meshes::Grid< Dimension, Real, Device, Index >;
+      using MeshType = GridType;
+      using RealType = typename GridType::RealType;
+      using IndexType = typename GridType::IndexType;
+      using CoordinatesType = typename GridType::CoordinatesType;
+      using PointType = typename GridType::PointType;
       //typedef Config ConfigType;
       
       static const int meshDimension = GridType::meshDimension;
@@ -57,12 +56,11 @@ class TestGridEntity< Meshes::Grid< Dimension, Real, Device, Index >, Dimension
       constexpr static int getDimensions() { return entityDimension; };
       
       constexpr static int getDimension() { return meshDimension; };
-      
-      
-      typedef Containers::StaticVector< meshDimension, IndexType > EntityOrientationType;
-      typedef Containers::StaticVector< meshDimension, IndexType > EntityBasisType;
-      typedef TestNeighborGridEntitiesStorage< TestGridEntity > NeighborGridEntitiesStorageType;
-      
+
+      using EntityOrientationType = Containers::StaticVector< meshDimension, IndexType >;
+      using EntityBasisType = Containers::StaticVector< meshDimension, IndexType >;
+      using NeighborGridEntitiesStorageType = TestNeighborGridEntitiesStorage< TestGridEntity >;
+
       __cuda_callable__ inline
       TestGridEntity( const GridType& grid )
       : grid( grid ),
diff --git a/src/Benchmarks/HeatEquation/Tuning/ExplicitUpdater.h b/src/Benchmarks/HeatEquation/Tuning/ExplicitUpdater.h
index b21ba7a494..c9e04890dc 100644
--- a/src/Benchmarks/HeatEquation/Tuning/ExplicitUpdater.h
+++ b/src/Benchmarks/HeatEquation/Tuning/ExplicitUpdater.h
@@ -54,22 +54,19 @@ template< typename Mesh,
 class ExplicitUpdater
 {
    public:
-      typedef Mesh MeshType;
-      typedef Pointers::SharedPointer<  MeshType > MeshPointer;
-      typedef typename MeshFunction::RealType RealType;
-      typedef typename MeshFunction::DeviceType DeviceType;
-      typedef typename MeshFunction::IndexType IndexType;
-      typedef ExplicitUpdaterTraverserUserData< RealType,
-                                                MeshFunction,
-                                                DifferentialOperator,
-                                                BoundaryConditions,
-                                                RightHandSide > TraverserUserData;
-      typedef Pointers::SharedPointer<  DifferentialOperator, DeviceType > DifferentialOperatorPointer;
-      typedef Pointers::SharedPointer<  BoundaryConditions, DeviceType > BoundaryConditionsPointer;
-      typedef Pointers::SharedPointer<  RightHandSide, DeviceType > RightHandSidePointer;
-      typedef Pointers::SharedPointer<  MeshFunction, DeviceType > MeshFunctionPointer;
-      typedef Pointers::SharedPointer<  TraverserUserData, DeviceType > TraverserUserDataPointer;
-      
+      using MeshType = Mesh;
+      using MeshPointer = Pointers::SharedPointer< MeshType >;
+      using RealType = typename MeshFunction::RealType;
+      using DeviceType = typename MeshFunction::DeviceType;
+      using IndexType = typename MeshFunction::IndexType;
+      using TraverserUserData =
+         ExplicitUpdaterTraverserUserData< RealType, MeshFunction, DifferentialOperator, BoundaryConditions, RightHandSide >;
+      using DifferentialOperatorPointer = Pointers::SharedPointer< DifferentialOperator, DeviceType >;
+      using BoundaryConditionsPointer = Pointers::SharedPointer< BoundaryConditions, DeviceType >;
+      using RightHandSidePointer = Pointers::SharedPointer< RightHandSide, DeviceType >;
+      using MeshFunctionPointer = Pointers::SharedPointer< MeshFunction, DeviceType >;
+      using TraverserUserDataPointer = Pointers::SharedPointer< TraverserUserData, DeviceType >;
+
       void setDifferentialOperator( const DifferentialOperatorPointer& differentialOperatorPointer )
       {
          this->userDataPointer->differentialOperator = &differentialOperatorPointer.template getData< DeviceType >();
@@ -165,8 +162,7 @@ class ExplicitUpdater
       class TraverserInteriorEntitiesProcessor
       {
          public:
-
-            typedef typename MeshType::PointType PointType;
+            using PointType = typename MeshType::PointType;
 
             template< typename EntityType >
             __cuda_callable__
@@ -174,7 +170,7 @@ class ExplicitUpdater
                                               TraverserUserData& userData,
                                               const EntityType& entity )
             {
-               typedef Functions::FunctionAdapter< MeshType, RightHandSide > FunctionAdapter;
+               using FunctionAdapter = Functions::FunctionAdapter< MeshType, RightHandSide >;
                ( *userData.fu )( entity )  = 
                   ( *userData.differentialOperator )( *userData.u, entity, userData.time );
                // TODO: fix the right hand side here !!!
@@ -188,7 +184,7 @@ class ExplicitUpdater
                                               const IndexType& entityIndex,
                                               const typename MeshType::CoordinatesType& coordinates )
             {
-               typedef Functions::FunctionAdapter< MeshType, RightHandSide > FunctionAdapter;
+               using FunctionAdapter = Functions::FunctionAdapter< MeshType, RightHandSide >;
                userData.real_fu[ entityIndex ] = 
                        ( *userData.differentialOperator )( mesh, userData.real_u, entityIndex, coordinates, userData.time );
                // TODO: fix the right hand side here !!!
diff --git a/src/Benchmarks/HeatEquation/Tuning/GridTraverser.h b/src/Benchmarks/HeatEquation/Tuning/GridTraverser.h
index b127a953da..75afe5e8c0 100644
--- a/src/Benchmarks/HeatEquation/Tuning/GridTraverser.h
+++ b/src/Benchmarks/HeatEquation/Tuning/GridTraverser.h
@@ -23,14 +23,13 @@ template< typename Real,
 class GridTraverser< Meshes::Grid< 2, Real, Devices::Host, Index >, Cell >
 {
    public:
-      
-      typedef Meshes::Grid< 2, Real, Devices::Host, Index > GridType;
-      typedef Pointers::SharedPointer<  GridType > GridPointer;
-      typedef Real RealType;
-      typedef Devices::Host DeviceType;
-      typedef Index IndexType;
-      typedef typename GridType::CoordinatesType CoordinatesType;
- 
+      using GridType = Meshes::Grid< 2, Real, Devices::Host, Index >;
+      using GridPointer = Pointers::SharedPointer< GridType >;
+      using RealType = Real;
+      using DeviceType = Devices::Host;
+      using IndexType = Index;
+      using CoordinatesType = typename GridType::CoordinatesType;
+
       template<
          typename GridEntity,
          typename EntitiesProcessor,
@@ -62,14 +61,13 @@ template< typename Real,
 class GridTraverser< Meshes::Grid< 2, Real, Devices::Cuda, Index >, Cell >
 {
    public:
-      
-      typedef Meshes::Grid< 2, Real, Devices::Cuda, Index > GridType;
-      typedef Pointers::SharedPointer<  GridType > GridPointer;
-      typedef Real RealType;
-      typedef Devices::Cuda DeviceType;
-      typedef Index IndexType;
-      typedef typename GridType::CoordinatesType CoordinatesType;
- 
+      using GridType = Meshes::Grid< 2, Real, Devices::Cuda, Index >;
+      using GridPointer = Pointers::SharedPointer< GridType >;
+      using RealType = Real;
+      using DeviceType = Devices::Cuda;
+      using IndexType = Index;
+      using CoordinatesType = typename GridType::CoordinatesType;
+
       template<
          typename GridEntity,
          typename EntitiesProcessor,
diff --git a/src/Benchmarks/HeatEquation/Tuning/SimpleCell.h b/src/Benchmarks/HeatEquation/Tuning/SimpleCell.h
index 4406a8542a..87cfbfabbb 100644
--- a/src/Benchmarks/HeatEquation/Tuning/SimpleCell.h
+++ b/src/Benchmarks/HeatEquation/Tuning/SimpleCell.h
@@ -9,17 +9,15 @@ template< typename Grid, typename Config = Meshes::GridEntityNoStencilStorage >
 class SimpleCell
 {
    public:
- 
-      typedef Grid GridType;
-      typedef GridType MeshType;
-      typedef typename GridType::RealType RealType;
-      typedef typename GridType::IndexType IndexType;
-      typedef typename GridType::CoordinatesType CoordinatesType;
-      typedef typename GridType::PointType PointType;
-      typedef Meshes::NeighborGridEntitiesStorage< SimpleCell, Config >
-         NeighborGridEntitiesStorageType;
-      typedef Config ConfigType;
-      
+      using GridType = Grid;
+      using MeshType = GridType;
+      using RealType = typename GridType::RealType;
+      using IndexType = typename GridType::IndexType;
+      using CoordinatesType = typename GridType::CoordinatesType;
+      using PointType = typename GridType::PointType;
+      using NeighborGridEntitiesStorageType = Meshes::NeighborGridEntitiesStorage< SimpleCell, Config >;
+      using ConfigType = Config;
+
       constexpr static int getMeshDimension() { return GridType::getMeshDimension(); };
  
       constexpr static int getEntityDimension() { return getMeshDimension(); };
diff --git a/src/Benchmarks/HeatEquation/Tuning/Traverser_Grid2D.h b/src/Benchmarks/HeatEquation/Tuning/Traverser_Grid2D.h
index 538940297d..87ea028fc7 100644
--- a/src/Benchmarks/HeatEquation/Tuning/Traverser_Grid2D.h
+++ b/src/Benchmarks/HeatEquation/Tuning/Traverser_Grid2D.h
@@ -38,9 +38,9 @@ template< typename Real,
 class Traverser< Meshes::Grid< 2, Real, Device, Index >, GridEntity, 2 >
 {
    public:
-      typedef Meshes::Grid< 2, Real, Device, Index > GridType;
-      typedef Pointers::SharedPointer<  GridType > GridPointer;
-      typedef typename GridType::CoordinatesType CoordinatesType;
+      using GridType = Meshes::Grid< 2, Real, Device, Index >;
+      using GridPointer = Pointers::SharedPointer< GridType >;
+      using CoordinatesType = typename GridType::CoordinatesType;
 
       template< typename UserData,
                 typename EntitiesProcessor >
diff --git a/src/Benchmarks/HeatEquation/tnl-benchmark-heat-equation.h b/src/Benchmarks/HeatEquation/tnl-benchmark-heat-equation.h
index 8ed3472e5f..532bfa4a10 100644
--- a/src/Benchmarks/HeatEquation/tnl-benchmark-heat-equation.h
+++ b/src/Benchmarks/HeatEquation/tnl-benchmark-heat-equation.h
@@ -9,7 +9,7 @@
 #include "HeatEquationBenchmarkRhs.h"
 #include "HeatEquationBenchmarkBuildConfigTag.h"
 
-typedef HeatEquationBenchmarkBuildConfigTag BuildConfig;
+using BuildConfig = HeatEquationBenchmarkBuildConfigTag;
 
 /****
  * Uncoment the following (and comment the previous line) for the complete build.
@@ -53,31 +53,32 @@ template< typename Real,
 class HeatEquationBenchmarkSetter
 {
    public:
-
-      typedef Real RealType;
-      typedef Device DeviceType;
-      typedef Index IndexType;
+      using RealType = Real;
+      using DeviceType = Device;
+      using IndexType = Index;
 
       static bool run( const Config::ParameterContainer & parameters )
       {
           enum { Dimension = MeshType::getMeshDimension() };
-          typedef BenchmarkLaplace< MeshType, Real, Index > ApproximateOperator;
-          typedef HeatEquationBenchmarkRhs< MeshType, Real > RightHandSide;
-          typedef Containers::StaticVector < MeshType::getMeshDimension(), Real > Point;
+          using ApproximateOperator = BenchmarkLaplace< MeshType, Real, Index >;
+          using RightHandSide = HeatEquationBenchmarkRhs< MeshType, Real >;
+          using Point = Containers::StaticVector< MeshType::getMeshDimension(), Real >;
 
-         /****
-          * Resolve the template arguments of your solver here.
-          * The following code is for the Dirichlet and the Neumann boundary conditions.
-          * Both can be constant or defined as descrete values of Vector.
-          */
+          /****
+           * Resolve the template arguments of your solver here.
+           * The following code is for the Dirichlet and the Neumann boundary conditions.
+           * Both can be constant or defined as descrete values of Vector.
+           */
           String boundaryConditionsType = parameters.getParameter< String >( "boundary-conditions-type" );
           if( parameters.checkParameter( "boundary-conditions-constant" ) )
           {
-             typedef Functions::Analytic::Constant< Dimension, Real > Constant;
+             using Constant = Functions::Analytic::Constant< Dimension, Real >;
              if( boundaryConditionsType == "dirichlet" )
              {
-                typedef Operators::DirichletBoundaryConditions< MeshType, Constant, MeshType::getMeshDimension(), Real, Index > BoundaryConditions;
-                typedef HeatEquationBenchmarkProblem< MeshType, BoundaryConditions, RightHandSide, ApproximateOperator > Problem;
+                using BoundaryConditions =
+                   Operators::DirichletBoundaryConditions< MeshType, Constant, MeshType::getMeshDimension(), Real, Index >;
+                using Problem =
+                   HeatEquationBenchmarkProblem< MeshType, BoundaryConditions, RightHandSide, ApproximateOperator >;
                 SolverStarter solverStarter;
                 return solverStarter.template run< Problem >( parameters );
              }
diff --git a/src/Benchmarks/HeatEquation/tnl-benchmark-simple-heat-equation.h b/src/Benchmarks/HeatEquation/tnl-benchmark-simple-heat-equation.h
index 6bfce808e9..5687a21820 100644
--- a/src/Benchmarks/HeatEquation/tnl-benchmark-simple-heat-equation.h
+++ b/src/Benchmarks/HeatEquation/tnl-benchmark-simple-heat-equation.h
@@ -537,8 +537,8 @@ bool solveHeatEquationHost( const Config::ParameterContainer& parameters,
    /****
     * Saving the result
     */
-   typedef Meshes::Grid< 2, Real, Devices::Host, Index > GridType;
-   typedef typename GridType::PointType PointType;
+   using GridType = Meshes::Grid< 2, Real, Devices::Host, Index >;
+   using PointType = typename GridType::PointType;
    Pointers::SharedPointer<  GridType > gridPointer;
    gridPointer->setDimensions( gridXSize, gridYSize );
    gridPointer->setDomain( PointType( 0.0, 0.0 ), PointType( domainXSize, domainYSize ) );
diff --git a/src/Benchmarks/ODESolvers/Euler.h b/src/Benchmarks/ODESolvers/Euler.h
index c5b12187e9..48b55d4b7f 100644
--- a/src/Benchmarks/ODESolvers/Euler.h
+++ b/src/Benchmarks/ODESolvers/Euler.h
@@ -16,13 +16,12 @@ template< typename Problem,
 class Euler : public Solvers::ODE::ExplicitSolver< Problem, SolverMonitor >
 {
    public:
-
-   typedef Problem  ProblemType;
-   typedef typename Problem::DofVectorType DofVectorType;
-   typedef typename Problem::RealType RealType;
-   typedef typename Problem::DeviceType DeviceType;
-   typedef typename Problem::IndexType IndexType;
-   typedef Pointers::SharedPointer<  DofVectorType, DeviceType > DofVectorPointer;
+   using ProblemType = Problem;
+   using DofVectorType = typename Problem::DofVectorType;
+   using RealType = typename Problem::RealType;
+   using DeviceType = typename Problem::DeviceType;
+   using IndexType = typename Problem::IndexType;
+   using DofVectorPointer = Pointers::SharedPointer< DofVectorType, DeviceType >;
    using VectorOperations = CommonVectorOperations< DeviceType >;
 
 
diff --git a/src/Benchmarks/ODESolvers/Merson.h b/src/Benchmarks/ODESolvers/Merson.h
index cf86a241dd..6bcdf64fa3 100644
--- a/src/Benchmarks/ODESolvers/Merson.h
+++ b/src/Benchmarks/ODESolvers/Merson.h
@@ -14,13 +14,12 @@ template< class Problem,
 class Merson : public Solvers::ODE::ExplicitSolver< Problem, SolverMonitor >
 {
    public:
-
-   typedef Problem ProblemType;
-   typedef typename Problem :: DofVectorType DofVectorType;
-   typedef typename Problem :: RealType RealType;
-   typedef typename Problem :: DeviceType DeviceType;
-   typedef typename Problem :: IndexType IndexType;
-   typedef Pointers::SharedPointer<  DofVectorType, DeviceType > DofVectorPointer;
+   using ProblemType = Problem;
+   using DofVectorType = typename Problem::DofVectorType;
+   using RealType = typename Problem::RealType;
+   using DeviceType = typename Problem::DeviceType;
+   using IndexType = typename Problem::IndexType;
+   using DofVectorPointer = Pointers::SharedPointer< DofVectorType, DeviceType >;
    using VectorOperations = CommonVectorOperations< DeviceType >;
    
    Merson();
diff --git a/src/TNL/Algorithms/Segments/detail/CheckLambdas.h b/src/TNL/Algorithms/Segments/detail/CheckLambdas.h
index 30fec96bd3..95fba02fff 100644
--- a/src/TNL/Algorithms/Segments/detail/CheckLambdas.h
+++ b/src/TNL/Algorithms/Segments/detail/CheckLambdas.h
@@ -15,8 +15,8 @@ template< typename Index, typename Lambda >
 class CheckFetchLambda
 {
 private:
-   typedef char YesType[ 1 ];
-   typedef char NoType[ 2 ];
+   using YesType = char[ 1 ];
+   using NoType = char[ 2 ];
 
    template< typename C >
    static YesType&
diff --git a/src/TNL/Functions/Analytic/Blob.h b/src/TNL/Functions/Analytic/Blob.h
index 0f568fde3e..0978e8636c 100644
--- a/src/TNL/Functions/Analytic/Blob.h
+++ b/src/TNL/Functions/Analytic/Blob.h
@@ -19,7 +19,7 @@ template< typename Real, int Dimension >
 class BlobBase : public Domain< Dimension, SpaceDomain >
 {
 public:
-   typedef Real RealType;
+   using RealType = Real;
 
    bool
    setup( const Config::ParameterContainer& parameters, const String& prefix = "" );
@@ -40,8 +40,8 @@ public:
    {
       Dimension = 1
    };
-   typedef Real RealType;
-   typedef Containers::StaticVector< Dimension, Real > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< Dimension, Real >;
 
    Blob();
 
@@ -63,8 +63,8 @@ public:
    {
       Dimension = 2
    };
-   typedef Real RealType;
-   typedef Containers::StaticVector< Dimension, Real > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< Dimension, Real >;
 
    Blob();
 
@@ -86,8 +86,8 @@ public:
    {
       Dimension = 3
    };
-   typedef Real RealType;
-   typedef Containers::StaticVector< Dimension, Real > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< Dimension, Real >;
 
    Blob();
 
diff --git a/src/TNL/Functions/Analytic/Constant.h b/src/TNL/Functions/Analytic/Constant.h
index 76033b6286..c0df590e14 100644
--- a/src/TNL/Functions/Analytic/Constant.h
+++ b/src/TNL/Functions/Analytic/Constant.h
@@ -18,8 +18,8 @@ template< int dimensions, typename Real = double >
 class Constant : public Domain< dimensions, NonspaceDomain >
 {
 public:
-   typedef Real RealType;
-   typedef Containers::StaticVector< dimensions, RealType > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< dimensions, RealType >;
 
    __cuda_callable__
    Constant();
diff --git a/src/TNL/Functions/Analytic/Cylinder.h b/src/TNL/Functions/Analytic/Cylinder.h
index 942248733e..0f74917127 100644
--- a/src/TNL/Functions/Analytic/Cylinder.h
+++ b/src/TNL/Functions/Analytic/Cylinder.h
@@ -19,7 +19,7 @@ template< typename Real, int Dimension >
 class CylinderBase : public Domain< Dimension, SpaceDomain >
 {
 public:
-   typedef Real RealType;
+   using RealType = Real;
 
    bool
    setup( const Config::ParameterContainer& parameters, const String& prefix = "" );
@@ -46,8 +46,8 @@ public:
    {
       Dimension = 1
    };
-   typedef Real RealType;
-   typedef Containers::StaticVector< Dimension, Real > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< Dimension, Real >;
 
    Cylinder();
 
@@ -69,8 +69,8 @@ public:
    {
       Dimension = 2
    };
-   typedef Real RealType;
-   typedef Containers::StaticVector< Dimension, Real > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< Dimension, Real >;
 
    Cylinder();
 
@@ -92,8 +92,8 @@ public:
    {
       Dimension = 3
    };
-   typedef Real RealType;
-   typedef Containers::StaticVector< Dimension, Real > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< Dimension, Real >;
 
    Cylinder();
 
diff --git a/src/TNL/Functions/Analytic/ExpBump.h b/src/TNL/Functions/Analytic/ExpBump.h
index 441f85ba47..e7fcaa89f4 100644
--- a/src/TNL/Functions/Analytic/ExpBump.h
+++ b/src/TNL/Functions/Analytic/ExpBump.h
@@ -18,7 +18,7 @@ template< int dimensions, typename Real >
 class ExpBumpBase : public Domain< dimensions, SpaceDomain >
 {
 public:
-   typedef Real RealType;
+   using RealType = Real;
 
    ExpBumpBase();
 
@@ -49,8 +49,8 @@ template< typename Real >
 class ExpBump< 1, Real > : public ExpBumpBase< 1, Real >
 {
 public:
-   typedef Real RealType;
-   typedef Containers::StaticVector< 1, RealType > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< 1, RealType >;
 
    ExpBump();
 
@@ -68,8 +68,8 @@ template< typename Real >
 class ExpBump< 2, Real > : public ExpBumpBase< 2, Real >
 {
 public:
-   typedef Real RealType;
-   typedef Containers::StaticVector< 2, RealType > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< 2, RealType >;
 
    ExpBump();
 
@@ -87,8 +87,8 @@ template< typename Real >
 class ExpBump< 3, Real > : public ExpBumpBase< 3, Real >
 {
 public:
-   typedef Real RealType;
-   typedef Containers::StaticVector< 3, RealType > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< 3, RealType >;
 
    ExpBump();
 
diff --git a/src/TNL/Functions/Analytic/Flowerpot.h b/src/TNL/Functions/Analytic/Flowerpot.h
index 1a0bfff17d..ee70c49054 100644
--- a/src/TNL/Functions/Analytic/Flowerpot.h
+++ b/src/TNL/Functions/Analytic/Flowerpot.h
@@ -19,7 +19,7 @@ template< typename Real, int Dimension >
 class FlowerpotBase : public Domain< Dimension, SpaceDomain >
 {
 public:
-   typedef Real RealType;
+   using RealType = Real;
 
    bool
    setup( const Config::ParameterContainer& parameters, const String& prefix = "" );
@@ -46,8 +46,8 @@ public:
    {
       Dimension = 1
    };
-   typedef Real RealType;
-   typedef Containers::StaticVector< Dimension, Real > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< Dimension, Real >;
 
    Flowerpot();
 
@@ -69,8 +69,8 @@ public:
    {
       Dimension = 2
    };
-   typedef Real RealType;
-   typedef Containers::StaticVector< Dimension, Real > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< Dimension, Real >;
 
    Flowerpot();
 
@@ -92,8 +92,8 @@ public:
    {
       Dimension = 3
    };
-   typedef Real RealType;
-   typedef Containers::StaticVector< Dimension, Real > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< Dimension, Real >;
 
    Flowerpot();
 
diff --git a/src/TNL/Functions/Analytic/Paraboloid.h b/src/TNL/Functions/Analytic/Paraboloid.h
index 93bebb8ee4..f994aa6190 100644
--- a/src/TNL/Functions/Analytic/Paraboloid.h
+++ b/src/TNL/Functions/Analytic/Paraboloid.h
@@ -65,8 +65,8 @@ template< typename Real >
 class Paraboloid< 1, Real > : public ParaboloidBase< 1, Real >
 {
 public:
-   typedef Real RealType;
-   typedef Containers::StaticVector< 1, RealType > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< 1, RealType >;
 
    template< int XDiffOrder = 0, int YDiffOrder = 0, int ZDiffOrder = 0 >
    __cuda_callable__
@@ -85,8 +85,8 @@ template< typename Real >
 class Paraboloid< 2, Real > : public ParaboloidBase< 2, Real >
 {
 public:
-   typedef Real RealType;
-   typedef Containers::StaticVector< 2, RealType > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< 2, RealType >;
 
    template< int XDiffOrder = 0, int YDiffOrder = 0, int ZDiffOrder = 0 >
    __cuda_callable__
@@ -105,8 +105,8 @@ template< typename Real >
 class Paraboloid< 3, Real > : public ParaboloidBase< 3, Real >
 {
 public:
-   typedef Real RealType;
-   typedef Containers::StaticVector< 3, RealType > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< 3, RealType >;
 
    template< int XDiffOrder = 0, int YDiffOrder = 0, int ZDiffOrder = 0 >
    __cuda_callable__
diff --git a/src/TNL/Functions/Analytic/ParaboloidSDF.h b/src/TNL/Functions/Analytic/ParaboloidSDF.h
index e6d89a67c1..57a44a54cf 100644
--- a/src/TNL/Functions/Analytic/ParaboloidSDF.h
+++ b/src/TNL/Functions/Analytic/ParaboloidSDF.h
@@ -65,8 +65,8 @@ template< typename Real >
 class ParaboloidSDF< 1, Real > : public ParaboloidSDFBase< 1, Real >
 {
 public:
-   typedef Real RealType;
-   typedef Containers::StaticVector< 1, RealType > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< 1, RealType >;
 
    template< int XDiffOrder = 0, int YDiffOrder = 0, int ZDiffOrder = 0 >
    __cuda_callable__
@@ -82,8 +82,8 @@ template< typename Real >
 class ParaboloidSDF< 2, Real > : public ParaboloidSDFBase< 2, Real >
 {
 public:
-   typedef Real RealType;
-   typedef Containers::StaticVector< 2, RealType > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< 2, RealType >;
 
    template< int XDiffOrder = 0, int YDiffOrder = 0, int ZDiffOrder = 0 >
    __cuda_callable__
@@ -99,8 +99,8 @@ template< typename Real >
 class ParaboloidSDF< 3, Real > : public ParaboloidSDFBase< 3, Real >
 {
 public:
-   typedef Real RealType;
-   typedef Containers::StaticVector< 3, RealType > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< 3, RealType >;
 
    template< int XDiffOrder = 0, int YDiffOrder = 0, int ZDiffOrder = 0 >
    __cuda_callable__
diff --git a/src/TNL/Functions/Analytic/PseudoSquare.h b/src/TNL/Functions/Analytic/PseudoSquare.h
index 2384fcbe9c..2525d680e0 100644
--- a/src/TNL/Functions/Analytic/PseudoSquare.h
+++ b/src/TNL/Functions/Analytic/PseudoSquare.h
@@ -19,7 +19,7 @@ template< typename Real, int Dimension >
 class PseudoSquareBase : public Domain< Dimension, SpaceDomain >
 {
 public:
-   typedef Real RealType;
+   using RealType = Real;
 
    bool
    setup( const Config::ParameterContainer& parameters, const String& prefix = "" );
@@ -40,8 +40,8 @@ public:
    {
       Dimension = 1
    };
-   typedef Real RealType;
-   typedef Containers::StaticVector< Dimension, Real > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< Dimension, Real >;
 
    PseudoSquare();
 
@@ -63,8 +63,8 @@ public:
    {
       Dimension = 2
    };
-   typedef Real RealType;
-   typedef Containers::StaticVector< Dimension, Real > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< Dimension, Real >;
 
    PseudoSquare();
 
@@ -86,8 +86,8 @@ public:
    {
       Dimension = 3
    };
-   typedef Real RealType;
-   typedef Containers::StaticVector< Dimension, Real > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< Dimension, Real >;
 
    PseudoSquare();
 
diff --git a/src/TNL/Functions/Analytic/SinBumps.h b/src/TNL/Functions/Analytic/SinBumps.h
index 53e0ee31d3..32930993d8 100644
--- a/src/TNL/Functions/Analytic/SinBumps.h
+++ b/src/TNL/Functions/Analytic/SinBumps.h
@@ -22,8 +22,8 @@ template< typename Point >
 class SinBumpsBase : public Domain< Point::getSize(), SpaceDomain >
 {
 public:
-   typedef Point PointType;
-   typedef typename Point::RealType RealType;
+   using PointType = Point;
+   using RealType = typename Point::RealType;
    enum
    {
       Dimension = PointType::getSize()
@@ -67,8 +67,8 @@ template< typename Real >
 class SinBumps< 1, Real > : public SinBumpsBase< Containers::StaticVector< 1, Real > >
 {
 public:
-   typedef Real RealType;
-   typedef Containers::StaticVector< 1, RealType > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< 1, RealType >;
 
    SinBumps();
 
@@ -89,8 +89,8 @@ template< typename Real >
 class SinBumps< 2, Real > : public SinBumpsBase< Containers::StaticVector< 2, Real > >
 {
 public:
-   typedef Real RealType;
-   typedef Containers::StaticVector< 2, RealType > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< 2, RealType >;
 
    SinBumps();
 
@@ -111,8 +111,8 @@ template< typename Real >
 class SinBumps< 3, Real > : public SinBumpsBase< Containers::StaticVector< 3, Real > >
 {
 public:
-   typedef Real RealType;
-   typedef Containers::StaticVector< 3, RealType > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< 3, RealType >;
 
    SinBumps();
 
diff --git a/src/TNL/Functions/Analytic/SinBumpsSDF.h b/src/TNL/Functions/Analytic/SinBumpsSDF.h
index 923b755e9e..7d641c8ecb 100644
--- a/src/TNL/Functions/Analytic/SinBumpsSDF.h
+++ b/src/TNL/Functions/Analytic/SinBumpsSDF.h
@@ -18,8 +18,8 @@ template< typename Point >
 class SinBumpsSDFBase : public Domain< Point::getSize(), SpaceDomain >
 {
 public:
-   typedef Point PointType;
-   typedef typename Point::RealType RealType;
+   using PointType = Point;
+   using RealType = typename Point::RealType;
    enum
    {
       Dimensions = PointType::getSize()
@@ -63,8 +63,8 @@ template< typename Real >
 class SinBumpsSDF< 1, Real > : public SinBumpsSDFBase< Containers::StaticVector< 1, Real > >
 {
 public:
-   typedef Real RealType;
-   typedef Containers::StaticVector< 1, RealType > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< 1, RealType >;
 
    SinBumpsSDF();
 
@@ -85,8 +85,8 @@ template< typename Real >
 class SinBumpsSDF< 2, Real > : public SinBumpsSDFBase< Containers::StaticVector< 2, Real > >
 {
 public:
-   typedef Real RealType;
-   typedef Containers::StaticVector< 2, RealType > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< 2, RealType >;
 
    SinBumpsSDF();
 
@@ -107,8 +107,8 @@ template< typename Real >
 class SinBumpsSDF< 3, Real > : public SinBumpsSDFBase< Containers::StaticVector< 3, Real > >
 {
 public:
-   typedef Real RealType;
-   typedef Containers::StaticVector< 3, RealType > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< 3, RealType >;
 
    SinBumpsSDF();
 
diff --git a/src/TNL/Functions/Analytic/SinWave.h b/src/TNL/Functions/Analytic/SinWave.h
index a0d200814d..a564e7dde8 100644
--- a/src/TNL/Functions/Analytic/SinWave.h
+++ b/src/TNL/Functions/Analytic/SinWave.h
@@ -65,8 +65,8 @@ template< typename Real >
 class SinWave< 1, Real > : public SinWaveBase< 1, Real >
 {
 public:
-   typedef Real RealType;
-   typedef Containers::StaticVector< 1, RealType > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< 1, RealType >;
 
    template< int XDiffOrder = 0, int YDiffOrder = 0, int ZDiffOrder = 0 >
    __cuda_callable__
@@ -82,8 +82,8 @@ template< typename Real >
 class SinWave< 2, Real > : public SinWaveBase< 2, Real >
 {
 public:
-   typedef Real RealType;
-   typedef Containers::StaticVector< 2, RealType > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< 2, RealType >;
 
    template< int XDiffOrder = 0, int YDiffOrder = 0, int ZDiffOrder = 0 >
    __cuda_callable__
@@ -99,8 +99,8 @@ template< typename Real >
 class SinWave< 3, Real > : public SinWaveBase< 3, Real >
 {
 public:
-   typedef Real RealType;
-   typedef Containers::StaticVector< 3, RealType > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< 3, RealType >;
 
    template< int XDiffOrder = 0, int YDiffOrder = 0, int ZDiffOrder = 0 >
    __cuda_callable__
diff --git a/src/TNL/Functions/Analytic/SinWaveSDF.h b/src/TNL/Functions/Analytic/SinWaveSDF.h
index 801b929585..bb14afd21d 100644
--- a/src/TNL/Functions/Analytic/SinWaveSDF.h
+++ b/src/TNL/Functions/Analytic/SinWaveSDF.h
@@ -63,8 +63,8 @@ template< typename Real >
 class SinWaveSDF< 1, Real > : public SinWaveSDFBase< 1, Real >
 {
 public:
-   typedef Real RealType;
-   typedef Containers::StaticVector< 1, RealType > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< 1, RealType >;
 
    template< int XDiffOrder = 0, int YDiffOrder = 0, int ZDiffOrder = 0 >
    __cuda_callable__
@@ -80,8 +80,8 @@ template< typename Real >
 class SinWaveSDF< 2, Real > : public SinWaveSDFBase< 2, Real >
 {
 public:
-   typedef Real RealType;
-   typedef Containers::StaticVector< 2, RealType > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< 2, RealType >;
 
    template< int XDiffOrder = 0, int YDiffOrder = 0, int ZDiffOrder = 0 >
    __cuda_callable__
@@ -97,8 +97,8 @@ template< typename Real >
 class SinWaveSDF< 3, Real > : public SinWaveSDFBase< 3, Real >
 {
 public:
-   typedef Real RealType;
-   typedef Containers::StaticVector< 3, RealType > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< 3, RealType >;
 
    template< int XDiffOrder = 0, int YDiffOrder = 0, int ZDiffOrder = 0 >
    __cuda_callable__
diff --git a/src/TNL/Functions/Analytic/Twins.h b/src/TNL/Functions/Analytic/Twins.h
index d1b0647b1e..4a0dc720e9 100644
--- a/src/TNL/Functions/Analytic/Twins.h
+++ b/src/TNL/Functions/Analytic/Twins.h
@@ -19,7 +19,7 @@ template< typename Real, int Dimension >
 class TwinsBase : public Domain< Dimension, SpaceDomain >
 {
 public:
-   typedef Real RealType;
+   using RealType = Real;
 
    bool
    setup( const Config::ParameterContainer& parameters, const String& prefix = "" );
@@ -37,8 +37,8 @@ public:
    {
       Dimension = 1
    };
-   typedef Real RealType;
-   typedef Containers::StaticVector< Dimension, Real > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< Dimension, Real >;
 
    Twins();
 
@@ -60,8 +60,8 @@ public:
    {
       Dimension = 2
    };
-   typedef Real RealType;
-   typedef Containers::StaticVector< Dimension, Real > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< Dimension, Real >;
 
    Twins();
 
@@ -83,8 +83,8 @@ public:
    {
       Dimension = 3
    };
-   typedef Real RealType;
-   typedef Containers::StaticVector< Dimension, Real > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< Dimension, Real >;
 
    Twins();
 
diff --git a/src/TNL/Functions/Analytic/VectorNorm.h b/src/TNL/Functions/Analytic/VectorNorm.h
index b06322cb68..d271da27c0 100644
--- a/src/TNL/Functions/Analytic/VectorNorm.h
+++ b/src/TNL/Functions/Analytic/VectorNorm.h
@@ -17,8 +17,8 @@ template< int Dimensions_, typename Real >
 class VectorNormBase : public Domain< Dimensions_, SpaceDomain >
 {
 public:
-   typedef Real RealType;
-   typedef Containers::StaticVector< Dimensions_, RealType > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< Dimensions_, RealType >;
 
    VectorNormBase() : center( 0.0 ), anisotropy( 1.0 ), power( 2.0 ), radius( 0.0 ), multiplicator( 1.0 ), maxNorm( false ){};
 
@@ -138,7 +138,7 @@ template< typename Real >
 class VectorNorm< 1, Real > : public VectorNormBase< 1, Real >
 {
 public:
-   typedef VectorNormBase< 1, Real > BaseType;
+   using BaseType = VectorNormBase< 1, Real >;
    using typename BaseType::PointType;
    using typename BaseType::RealType;
 
@@ -171,7 +171,7 @@ template< typename Real >
 class VectorNorm< 2, Real > : public VectorNormBase< 2, Real >
 {
 public:
-   typedef VectorNormBase< 2, Real > BaseType;
+   using BaseType = VectorNormBase< 2, Real >;
    using typename BaseType::PointType;
    using typename BaseType::RealType;
 
@@ -216,7 +216,7 @@ template< typename Real >
 class VectorNorm< 3, Real > : public VectorNormBase< 3, Real >
 {
 public:
-   typedef VectorNormBase< 3, Real > BaseType;
+   using BaseType = VectorNormBase< 3, Real >;
    using typename BaseType::PointType;
    using typename BaseType::RealType;
 
diff --git a/src/TNL/Functions/Domain.h b/src/TNL/Functions/Domain.h
index 3bf93a2f4a..2423882d8c 100644
--- a/src/TNL/Functions/Domain.h
+++ b/src/TNL/Functions/Domain.h
@@ -22,7 +22,7 @@ template< int Dimension, DomainType DomainType_ = SpaceDomain >
 class Domain
 {
 public:
-   typedef void DeviceType;
+   using DeviceType = void;
 
    static constexpr int
    getDomainDimension()
diff --git a/src/TNL/Functions/FunctionAdapter.h b/src/TNL/Functions/FunctionAdapter.h
index b0c73be9ae..c791f60dc6 100644
--- a/src/TNL/Functions/FunctionAdapter.h
+++ b/src/TNL/Functions/FunctionAdapter.h
@@ -23,10 +23,10 @@ template< typename Mesh, typename Function, int domainType = Function::getDomain
 class FunctionAdapter
 {
 public:
-   typedef Function FunctionType;
-   typedef Mesh MeshType;
-   typedef typename FunctionType::RealType RealType;
-   typedef typename MeshType::GlobalIndexType IndexType;
+   using FunctionType = Function;
+   using MeshType = Mesh;
+   using RealType = typename FunctionType::RealType;
+   using IndexType = typename MeshType::GlobalIndexType;
    // typedef typename FunctionType::PointType PointType;
 
    template< typename MeshPointer >
@@ -56,11 +56,11 @@ template< typename Mesh, typename Function >
 class FunctionAdapter< Mesh, Function, SpaceDomain >
 {
 public:
-   typedef Function FunctionType;
-   typedef Mesh MeshType;
-   typedef typename FunctionType::RealType RealType;
-   typedef typename MeshType::GlobalIndexType IndexType;
-   typedef typename FunctionType::PointType PointType;
+   using FunctionType = Function;
+   using MeshType = Mesh;
+   using RealType = typename FunctionType::RealType;
+   using IndexType = typename MeshType::GlobalIndexType;
+   using PointType = typename FunctionType::PointType;
 
    template< typename MeshPointer >
    static bool
@@ -90,11 +90,11 @@ template< typename Mesh, typename Function >
 class FunctionAdapter< Mesh, Function, NonspaceDomain >
 {
 public:
-   typedef Function FunctionType;
-   typedef Mesh MeshType;
-   typedef typename FunctionType::RealType RealType;
-   typedef typename MeshType::GlobalIndexType IndexType;
-   typedef typename FunctionType::PointType PointType;
+   using FunctionType = Function;
+   using MeshType = Mesh;
+   using RealType = typename FunctionType::RealType;
+   using IndexType = typename MeshType::GlobalIndexType;
+   using PointType = typename FunctionType::PointType;
 
    template< typename MeshPointer >
    static bool
diff --git a/src/TNL/Functions/MeshFunctionEvaluator.h b/src/TNL/Functions/MeshFunctionEvaluator.h
index 586232da00..f50b0aab66 100644
--- a/src/TNL/Functions/MeshFunctionEvaluator.h
+++ b/src/TNL/Functions/MeshFunctionEvaluator.h
@@ -15,7 +15,7 @@ template< typename OutMeshFunction, typename InFunction, typename Real >
 class MeshFunctionEvaluatorTraverserUserData
 {
 public:
-   typedef InFunction InFunctionType;
+   using InFunctionType = InFunction;
 
    MeshFunctionEvaluatorTraverserUserData( const InFunction* function,
                                            const Real& time,
@@ -47,10 +47,10 @@ class MeshFunctionEvaluator
                   "Input and output functions must have the same domain dimensions." );
 
 public:
-   typedef typename InFunction::RealType RealType;
-   typedef typename OutMeshFunction::MeshType MeshType;
-   typedef typename MeshType::DeviceType DeviceType;
-   typedef Functions::MeshFunctionEvaluatorTraverserUserData< OutMeshFunction, InFunction, RealType > TraverserUserData;
+   using RealType = typename InFunction::RealType;
+   using MeshType = typename OutMeshFunction::MeshType;
+   using DeviceType = typename MeshType::DeviceType;
+   using TraverserUserData = Functions::MeshFunctionEvaluatorTraverserUserData< OutMeshFunction, InFunction, RealType >;
 
    template< typename OutMeshFunctionPointer, typename InFunctionPointer >
    static void
@@ -111,7 +111,7 @@ public:
    static inline void
    processEntity( const MeshType& mesh, UserData& userData, const EntityType& entity )
    {
-      typedef FunctionAdapter< MeshType, typename UserData::InFunctionType > FunctionAdapter;
+      using FunctionAdapter = FunctionAdapter< MeshType, typename UserData::InFunctionType >;
       ( *userData.meshFunction )( entity ) =
          userData.inFunctionMultiplicator * FunctionAdapter::getValue( *userData.function, entity, userData.time );
       /*cerr << "Idx = " << entity.getIndex()
@@ -130,7 +130,7 @@ public:
    static inline void
    processEntity( const MeshType& mesh, UserData& userData, const EntityType& entity )
    {
-      typedef FunctionAdapter< MeshType, typename UserData::InFunctionType > FunctionAdapter;
+      using FunctionAdapter = FunctionAdapter< MeshType, typename UserData::InFunctionType >;
       ( *userData.meshFunction )( entity ) =
          userData.outFunctionMultiplicator * ( *userData.meshFunction )( entity )
          + userData.inFunctionMultiplicator * FunctionAdapter::getValue( *userData.function, entity, userData.time );
diff --git a/src/TNL/Functions/MeshFunctionEvaluator_impl.h b/src/TNL/Functions/MeshFunctionEvaluator_impl.h
index a8a3d8515f..3bac5923d9 100644
--- a/src/TNL/Functions/MeshFunctionEvaluator_impl.h
+++ b/src/TNL/Functions/MeshFunctionEvaluator_impl.h
@@ -112,10 +112,10 @@ MeshFunctionEvaluator< OutMeshFunction, InFunction >::evaluateEntities( OutMeshF
    static_assert( std::is_same< typename std::decay< typename InFunctionPointer::ObjectType >::type, InFunction >::value,
                   "expected a smart pointer" );
 
-   typedef typename MeshType::template EntityType< OutMeshFunction::getEntitiesDimension() > MeshEntityType;
-   typedef Functions::MeshFunctionEvaluatorAssignmentEntitiesProcessor< MeshType, TraverserUserData >
-      AssignmentEntitiesProcessor;
-   typedef Functions::MeshFunctionEvaluatorAdditionEntitiesProcessor< MeshType, TraverserUserData > AdditionEntitiesProcessor;
+   using MeshEntityType = typename MeshType::template EntityType< OutMeshFunction::getEntitiesDimension() >;
+   using AssignmentEntitiesProcessor =
+      Functions::MeshFunctionEvaluatorAssignmentEntitiesProcessor< MeshType, TraverserUserData >;
+   using AdditionEntitiesProcessor = Functions::MeshFunctionEvaluatorAdditionEntitiesProcessor< MeshType, TraverserUserData >;
    // typedef typename OutMeshFunction::MeshPointer OutMeshPointer;
 
    TraverserUserData userData( &function.template getData< DeviceType >(),
diff --git a/src/TNL/Functions/MeshFunctionNormGetter.h b/src/TNL/Functions/MeshFunctionNormGetter.h
index 060005dde8..362e85044e 100644
--- a/src/TNL/Functions/MeshFunctionNormGetter.h
+++ b/src/TNL/Functions/MeshFunctionNormGetter.h
@@ -24,16 +24,16 @@ template< int Dimension, typename MeshReal, typename MeshIndex >
 class MeshFunctionNormGetter< Meshes::Grid< Dimension, MeshReal, Devices::Host, MeshIndex > >
 {
 public:
-   typedef Meshes::Grid< Dimension, MeshReal, Devices::Host, MeshIndex > GridType;
-   typedef MeshReal MeshRealType;
-   typedef Devices::Host DeviceType;
-   typedef MeshIndex MeshIndexType;
+   using GridType = Meshes::Grid< Dimension, MeshReal, Devices::Host, MeshIndex >;
+   using MeshRealType = MeshReal;
+   using DeviceType = Devices::Host;
+   using MeshIndexType = MeshIndex;
 
    template< typename MeshFunctionType >
    static typename MeshFunctionType::RealType
    getNorm( const MeshFunctionType& function, const typename MeshFunctionType::RealType& p )
    {
-      typedef typename MeshFunctionType::RealType RealType;
+      using RealType = typename MeshFunctionType::RealType;
       static constexpr int EntityDimension = MeshFunctionType::getEntitiesDimension();
       if( EntityDimension == Dimension ) {
          if( p == 1.0 )
@@ -43,8 +43,8 @@ public:
          return std::pow( function.getMesh().getCellMeasure(), 1.0 / p ) * lpNorm( function.getData(), p );
       }
       if( EntityDimension > 0 ) {
-         typedef typename MeshFunctionType::MeshType MeshType;
-         typedef typename MeshType::Face EntityType;
+         using MeshType = typename MeshFunctionType::MeshType;
+         using EntityType = typename MeshType::Face;
          if( p == 1.0 ) {
             RealType result( 0.0 );
             for( MeshIndexType i = 0; i < function.getMesh().template getEntitiesCount< EntityType >(); i++ ) {
@@ -85,16 +85,16 @@ template< int Dimension, typename MeshReal, typename MeshIndex >
 class MeshFunctionNormGetter< Meshes::Grid< Dimension, MeshReal, Devices::Cuda, MeshIndex > >
 {
 public:
-   typedef Meshes::Grid< Dimension, MeshReal, Devices::Cuda, MeshIndex > GridType;
-   typedef MeshReal MeshRealType;
-   typedef Devices::Cuda DeviceType;
-   typedef MeshIndex MeshIndexType;
+   using GridType = Meshes::Grid< Dimension, MeshReal, Devices::Cuda, MeshIndex >;
+   using MeshRealType = MeshReal;
+   using DeviceType = Devices::Cuda;
+   using MeshIndexType = MeshIndex;
 
    template< typename MeshFunctionType >
    static typename MeshFunctionType::RealType
    getNorm( const MeshFunctionType& function, const typename MeshFunctionType::RealType& p )
    {
-      typedef typename MeshFunctionType::RealType RealType;
+      using RealType = typename MeshFunctionType::RealType;
       static constexpr int EntityDimension = MeshFunctionType::getEntitiesDimension();
       if( EntityDimension == Dimension ) {
          if( p == 1.0 )
@@ -104,8 +104,8 @@ public:
          return ::pow( function.getMesh().getCellMeasure(), 1.0 / p ) * function.getData().lpNorm( p );
       }
       if( EntityDimension > 0 ) {
-         typedef typename MeshFunctionType::MeshType MeshType;
-         typedef typename MeshType::Face EntityType;
+         using MeshType = typename MeshFunctionType::MeshType;
+         using EntityType = typename MeshType::Face;
          throw Exceptions::NotImplementedError( "Not implemented yet." );
       }
 
diff --git a/src/TNL/Functions/TestFunction.h b/src/TNL/Functions/TestFunction.h
index a8e6e33e4f..d34055f1f5 100644
--- a/src/TNL/Functions/TestFunction.h
+++ b/src/TNL/Functions/TestFunction.h
@@ -57,8 +57,8 @@ public:
    {
       Dimension = FunctionDimension
    };
-   typedef Real RealType;
-   typedef Containers::StaticVector< Dimension, Real > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< Dimension, Real >;
 
    TestFunction();
 
diff --git a/src/TNL/Functions/TestFunction_impl.h b/src/TNL/Functions/TestFunction_impl.h
index 3086271d18..4efe45a2ae 100644
--- a/src/TNL/Functions/TestFunction_impl.h
+++ b/src/TNL/Functions/TestFunction_impl.h
@@ -176,114 +176,114 @@ TestFunction< FunctionDimension, Real, Device >::setup( const Config::ParameterC
    const String& testFunction = parameters.getParameter< String >( prefix + "test-function" );
    std::cout << "Test function ... " << testFunction << std::endl;
    if( testFunction == "constant" ) {
-      typedef Constant< Dimension, Real > FunctionType;
-      typedef Identity< Dimension, Real > OperatorType;
+      using FunctionType = Constant< Dimension, Real >;
+      using OperatorType = Identity< Dimension, Real >;
       functionType = constant;
       operatorType = identity;
       return ( setupFunction< FunctionType >( parameters, prefix ) && setupOperator< OperatorType >( parameters, prefix ) );
    }
    if( testFunction == "paraboloid" ) {
-      typedef Paraboloid< Dimension, Real > FunctionType;
-      typedef Identity< Dimension, Real > OperatorType;
+      using FunctionType = Paraboloid< Dimension, Real >;
+      using OperatorType = Identity< Dimension, Real >;
       functionType = paraboloid;
       operatorType = identity;
       return ( setupFunction< FunctionType >( parameters, prefix ) && setupOperator< OperatorType >( parameters, prefix ) );
    }
    if( testFunction == "exp-bump" ) {
-      typedef ExpBump< Dimension, Real > FunctionType;
-      typedef Identity< Dimension, Real > OperatorType;
+      using FunctionType = ExpBump< Dimension, Real >;
+      using OperatorType = Identity< Dimension, Real >;
       functionType = expBump;
       operatorType = identity;
       return ( setupFunction< FunctionType >( parameters, prefix ) && setupOperator< OperatorType >( parameters, prefix ) );
    }
    if( testFunction == "sin-bumps" ) {
-      typedef SinBumps< Dimension, Real > FunctionType;
-      typedef Identity< Dimension, Real > OperatorType;
+      using FunctionType = SinBumps< Dimension, Real >;
+      using OperatorType = Identity< Dimension, Real >;
       functionType = sinBumps;
       operatorType = identity;
       return ( setupFunction< FunctionType >( parameters, prefix ) && setupOperator< OperatorType >( parameters, prefix ) );
    }
    if( testFunction == "sin-wave" ) {
-      typedef SinWave< Dimension, Real > FunctionType;
-      typedef Identity< Dimension, Real > OperatorType;
+      using FunctionType = SinWave< Dimension, Real >;
+      using OperatorType = Identity< Dimension, Real >;
       functionType = sinWave;
       operatorType = identity;
       return ( setupFunction< FunctionType >( parameters, prefix ) && setupOperator< OperatorType >( parameters, prefix ) );
    }
    if( testFunction == "cylinder" ) {
-      typedef Cylinder< Dimension, Real > FunctionType;
-      typedef Identity< Dimension, Real > OperatorType;
+      using FunctionType = Cylinder< Dimension, Real >;
+      using OperatorType = Identity< Dimension, Real >;
       functionType = cylinder;
       operatorType = identity;
       return ( setupFunction< FunctionType >( parameters, prefix ) && setupOperator< OperatorType >( parameters, prefix ) );
    }
    if( testFunction == "flowerpot" ) {
-      typedef Flowerpot< Dimension, Real > FunctionType;
-      typedef Identity< Dimension, Real > OperatorType;
+      using FunctionType = Flowerpot< Dimension, Real >;
+      using OperatorType = Identity< Dimension, Real >;
       functionType = flowerpot;
       operatorType = identity;
       return ( setupFunction< FunctionType >( parameters, prefix ) && setupOperator< OperatorType >( parameters, prefix ) );
    }
    if( testFunction == "twins" ) {
-      typedef Twins< Dimension, Real > FunctionType;
-      typedef Identity< Dimension, Real > OperatorType;
+      using FunctionType = Twins< Dimension, Real >;
+      using OperatorType = Identity< Dimension, Real >;
       functionType = twins;
       operatorType = identity;
       return ( setupFunction< FunctionType >( parameters, prefix ) && setupOperator< OperatorType >( parameters, prefix ) );
    }
    if( testFunction == "pseudoSquare" ) {
-      typedef PseudoSquare< Dimension, Real > FunctionType;
-      typedef Identity< Dimension, Real > OperatorType;
+      using FunctionType = PseudoSquare< Dimension, Real >;
+      using OperatorType = Identity< Dimension, Real >;
       functionType = pseudoSquare;
       operatorType = identity;
       return ( setupFunction< FunctionType >( parameters, prefix ) && setupOperator< OperatorType >( parameters, prefix ) );
    }
    if( testFunction == "blob" ) {
-      typedef Blob< Dimension, Real > FunctionType;
-      typedef Identity< Dimension, Real > OperatorType;
+      using FunctionType = Blob< Dimension, Real >;
+      using OperatorType = Identity< Dimension, Real >;
       functionType = blob;
       operatorType = identity;
       return ( setupFunction< FunctionType >( parameters, prefix ) && setupOperator< OperatorType >( parameters, prefix ) );
    }
    if( testFunction == "paraboloid-sdf" ) {
-      typedef ParaboloidSDF< Dimension, Real > FunctionType;
-      typedef Identity< Dimension, Real > OperatorType;
+      using FunctionType = ParaboloidSDF< Dimension, Real >;
+      using OperatorType = Identity< Dimension, Real >;
       functionType = paraboloidSDF;
       operatorType = identity;
       return ( setupFunction< FunctionType >( parameters, prefix ) && setupOperator< OperatorType >( parameters, prefix ) );
    }
    if( testFunction == "sin-bumps-sdf" ) {
-      typedef SinBumpsSDF< Dimension, Real > FunctionType;
-      typedef Identity< Dimension, Real > OperatorType;
+      using FunctionType = SinBumpsSDF< Dimension, Real >;
+      using OperatorType = Identity< Dimension, Real >;
       functionType = sinBumpsSDF;
       operatorType = identity;
       return ( setupFunction< FunctionType >( parameters, prefix ) && setupOperator< OperatorType >( parameters, prefix ) );
    }
    if( testFunction == "sin-wave-sdf" ) {
-      typedef SinWaveSDF< Dimension, Real > FunctionType;
-      typedef Identity< Dimension, Real > OperatorType;
+      using FunctionType = SinWaveSDF< Dimension, Real >;
+      using OperatorType = Identity< Dimension, Real >;
       functionType = sinWaveSDF;
       operatorType = identity;
       return ( setupFunction< FunctionType >( parameters, prefix ) && setupOperator< OperatorType >( parameters, prefix ) );
    }
    if( testFunction == "vector-norm" ) {
-      typedef VectorNorm< Dimension, Real > FunctionType;
-      typedef Identity< Dimension, Real > OperatorType;
+      using FunctionType = VectorNorm< Dimension, Real >;
+      using OperatorType = Identity< Dimension, Real >;
       functionType = vectorNorm;
       operatorType = identity;
       return ( setupFunction< FunctionType >( parameters, prefix ) && setupOperator< OperatorType >( parameters, prefix ) );
    }
    if( testFunction == "heaviside-of-vector-norm" ) {
-      typedef VectorNorm< Dimension, Real > FunctionType;
-      typedef Heaviside< Dimension, Real > OperatorType;
+      using FunctionType = VectorNorm< Dimension, Real >;
+      using OperatorType = Heaviside< Dimension, Real >;
       functionType = vectorNorm;
       operatorType = heaviside;
       return ( setupFunction< FunctionType >( parameters, prefix + "vector-norm-" )
                && setupOperator< OperatorType >( parameters, prefix + "heaviside-" ) );
    }
    if( testFunction == "smooth-heaviside-of-vector-norm" ) {
-      typedef VectorNorm< Dimension, Real > FunctionType;
-      typedef SmoothHeaviside< Dimension, Real > OperatorType;
+      using FunctionType = VectorNorm< Dimension, Real >;
+      using OperatorType = SmoothHeaviside< Dimension, Real >;
       functionType = vectorNorm;
       operatorType = smoothHeaviside;
       return ( setupFunction< FunctionType >( parameters, prefix + "vector-norm-" )
@@ -380,8 +380,8 @@ TestFunction< FunctionDimension, Real, Device >::getPartialDerivative( const Poi
    switch( functionType ) {
       case constant:
          {
-            typedef Constant< Dimension, Real > FunctionType;
-            typedef Identity< Dimension, Real > OperatorType;
+            using FunctionType = Constant< Dimension, Real >;
+            using OperatorType = Identity< Dimension, Real >;
 
             return scale
                  * ( (OperatorType*) this->operator_ )
@@ -390,9 +390,9 @@ TestFunction< FunctionDimension, Real, Device >::getPartialDerivative( const Poi
          }
       case paraboloid:
          {
-            typedef Paraboloid< Dimension, Real > FunctionType;
+            using FunctionType = Paraboloid< Dimension, Real >;
             if( operatorType == identity ) {
-               typedef Identity< Dimension, Real > OperatorType;
+               using OperatorType = Identity< Dimension, Real >;
 
                return scale
                     * ( (OperatorType*) this->operator_ )
@@ -400,7 +400,7 @@ TestFunction< FunctionDimension, Real, Device >::getPartialDerivative( const Poi
                             *(FunctionType*) this->function, vertex, time );
             }
             if( operatorType == heaviside ) {
-               typedef Heaviside< Dimension, Real > OperatorType;
+               using OperatorType = Heaviside< Dimension, Real >;
 
                return scale
                     * ( (OperatorType*) this->operator_ )
@@ -408,7 +408,7 @@ TestFunction< FunctionDimension, Real, Device >::getPartialDerivative( const Poi
                             *(FunctionType*) this->function, vertex, time );
             }
             if( operatorType == smoothHeaviside ) {
-               typedef SmoothHeaviside< Dimension, Real > OperatorType;
+               using OperatorType = SmoothHeaviside< Dimension, Real >;
 
                return scale
                     * ( (OperatorType*) this->operator_ )
@@ -418,8 +418,8 @@ TestFunction< FunctionDimension, Real, Device >::getPartialDerivative( const Poi
          }
       case expBump:
          {
-            typedef ExpBump< Dimension, Real > FunctionType;
-            typedef Identity< Dimension, Real > OperatorType;
+            using FunctionType = ExpBump< Dimension, Real >;
+            using OperatorType = Identity< Dimension, Real >;
 
             return scale
                  * ( (OperatorType*) this->operator_ )
@@ -428,8 +428,8 @@ TestFunction< FunctionDimension, Real, Device >::getPartialDerivative( const Poi
          }
       case sinBumps:
          {
-            typedef SinBumps< Dimension, Real > FunctionType;
-            typedef Identity< Dimension, Real > OperatorType;
+            using FunctionType = SinBumps< Dimension, Real >;
+            using OperatorType = Identity< Dimension, Real >;
 
             return scale
                  * ( (OperatorType*) this->operator_ )
@@ -438,8 +438,8 @@ TestFunction< FunctionDimension, Real, Device >::getPartialDerivative( const Poi
          }
       case sinWave:
          {
-            typedef SinWave< Dimension, Real > FunctionType;
-            typedef Identity< Dimension, Real > OperatorType;
+            using FunctionType = SinWave< Dimension, Real >;
+            using OperatorType = Identity< Dimension, Real >;
 
             return scale
                  * ( (OperatorType*) this->operator_ )
@@ -448,8 +448,8 @@ TestFunction< FunctionDimension, Real, Device >::getPartialDerivative( const Poi
          }
       case cylinder:
          {
-            typedef Cylinder< Dimension, Real > FunctionType;
-            typedef Identity< Dimension, Real > OperatorType;
+            using FunctionType = Cylinder< Dimension, Real >;
+            using OperatorType = Identity< Dimension, Real >;
 
             return scale
                  * ( (OperatorType*) this->operator_ )
@@ -458,8 +458,8 @@ TestFunction< FunctionDimension, Real, Device >::getPartialDerivative( const Poi
          }
       case flowerpot:
          {
-            typedef Flowerpot< Dimension, Real > FunctionType;
-            typedef Identity< Dimension, Real > OperatorType;
+            using FunctionType = Flowerpot< Dimension, Real >;
+            using OperatorType = Identity< Dimension, Real >;
 
             return scale
                  * ( (OperatorType*) this->operator_ )
@@ -468,8 +468,8 @@ TestFunction< FunctionDimension, Real, Device >::getPartialDerivative( const Poi
          }
       case twins:
          {
-            typedef Twins< Dimension, Real > FunctionType;
-            typedef Identity< Dimension, Real > OperatorType;
+            using FunctionType = Twins< Dimension, Real >;
+            using OperatorType = Identity< Dimension, Real >;
 
             return scale
                  * ( (OperatorType*) this->operator_ )
@@ -478,8 +478,8 @@ TestFunction< FunctionDimension, Real, Device >::getPartialDerivative( const Poi
          }
       case pseudoSquare:
          {
-            typedef PseudoSquare< Dimension, Real > FunctionType;
-            typedef Identity< Dimension, Real > OperatorType;
+            using FunctionType = PseudoSquare< Dimension, Real >;
+            using OperatorType = Identity< Dimension, Real >;
 
             return scale
                  * ( (OperatorType*) this->operator_ )
@@ -488,8 +488,8 @@ TestFunction< FunctionDimension, Real, Device >::getPartialDerivative( const Poi
          }
       case blob:
          {
-            typedef Blob< Dimension, Real > FunctionType;
-            typedef Identity< Dimension, Real > OperatorType;
+            using FunctionType = Blob< Dimension, Real >;
+            using OperatorType = Identity< Dimension, Real >;
 
             return scale
                  * ( (OperatorType*) this->operator_ )
@@ -498,9 +498,9 @@ TestFunction< FunctionDimension, Real, Device >::getPartialDerivative( const Poi
          }
       case vectorNorm:
          {
-            typedef VectorNorm< Dimension, Real > FunctionType;
+            using FunctionType = VectorNorm< Dimension, Real >;
             if( operatorType == identity ) {
-               typedef Identity< Dimension, Real > OperatorType;
+               using OperatorType = Identity< Dimension, Real >;
 
                return scale
                     * ( (OperatorType*) this->operator_ )
@@ -508,7 +508,7 @@ TestFunction< FunctionDimension, Real, Device >::getPartialDerivative( const Poi
                             *(FunctionType*) this->function, vertex, time );
             }
             if( operatorType == heaviside ) {
-               typedef Heaviside< Dimension, Real > OperatorType;
+               using OperatorType = Heaviside< Dimension, Real >;
 
                return scale
                     * ( (OperatorType*) this->operator_ )
@@ -516,7 +516,7 @@ TestFunction< FunctionDimension, Real, Device >::getPartialDerivative( const Poi
                             *(FunctionType*) this->function, vertex, time );
             }
             if( operatorType == smoothHeaviside ) {
-               typedef SmoothHeaviside< Dimension, Real > OperatorType;
+               using OperatorType = SmoothHeaviside< Dimension, Real >;
 
                return scale
                     * ( (OperatorType*) this->operator_ )
@@ -526,8 +526,8 @@ TestFunction< FunctionDimension, Real, Device >::getPartialDerivative( const Poi
          }
       case sinBumpsSDF:
          {
-            typedef SinBumpsSDF< Dimension, Real > FunctionType;
-            typedef Identity< Dimension, Real > OperatorType;
+            using FunctionType = SinBumpsSDF< Dimension, Real >;
+            using OperatorType = Identity< Dimension, Real >;
 
             return scale
                  * ( (OperatorType*) this->operator_ )
@@ -536,8 +536,8 @@ TestFunction< FunctionDimension, Real, Device >::getPartialDerivative( const Poi
          }
       case sinWaveSDF:
          {
-            typedef SinWaveSDF< Dimension, Real > FunctionType;
-            typedef Identity< Dimension, Real > OperatorType;
+            using FunctionType = SinWaveSDF< Dimension, Real >;
+            using OperatorType = Identity< Dimension, Real >;
 
             return scale
                  * ( (OperatorType*) this->operator_ )
@@ -546,8 +546,8 @@ TestFunction< FunctionDimension, Real, Device >::getPartialDerivative( const Poi
          }
       case paraboloidSDF:
          {
-            typedef ParaboloidSDF< Dimension, Real > FunctionType;
-            typedef Identity< Dimension, Real > OperatorType;
+            using FunctionType = ParaboloidSDF< Dimension, Real >;
+            using OperatorType = Identity< Dimension, Real >;
 
             return scale
                  * ( (OperatorType*) this->operator_ )
@@ -584,35 +584,35 @@ TestFunction< FunctionDimension, Real, Device >::getTimeDerivative( const PointT
    switch( functionType ) {
       case constant:
          {
-            typedef Constant< Dimension, Real > FunctionType;
+            using FunctionType = Constant< Dimension, Real >;
             return scale
                  * ( (FunctionType*) function )
                       ->template getPartialDerivative< XDiffOrder, YDiffOrder, ZDiffOrder >( vertex, time );
          }
       case paraboloid:
          {
-            typedef Paraboloid< Dimension, Real > FunctionType;
+            using FunctionType = Paraboloid< Dimension, Real >;
             return scale
                  * ( (FunctionType*) function )
                       ->template getPartialDerivative< XDiffOrder, YDiffOrder, ZDiffOrder >( vertex, time );
          }
       case expBump:
          {
-            typedef ExpBump< Dimension, Real > FunctionType;
+            using FunctionType = ExpBump< Dimension, Real >;
             return scale
                  * ( (FunctionType*) function )
                       ->template getPartialDerivative< XDiffOrder, YDiffOrder, ZDiffOrder >( vertex, time );
          }
       case sinBumps:
          {
-            typedef SinBumps< Dimension, Real > FunctionType;
+            using FunctionType = SinBumps< Dimension, Real >;
             return scale
                  * ( (FunctionType*) function )
                       ->template getPartialDerivative< XDiffOrder, YDiffOrder, ZDiffOrder >( vertex, time );
          }
       case sinWave:
          {
-            typedef SinWave< Dimension, Real > FunctionType;
+            using FunctionType = SinWave< Dimension, Real >;
             return scale
                  * ( (FunctionType*) function )
                       ->template getPartialDerivative< XDiffOrder, YDiffOrder, ZDiffOrder >( vertex, time );
@@ -620,7 +620,7 @@ TestFunction< FunctionDimension, Real, Device >::getTimeDerivative( const PointT
          }
       case cylinder:
          {
-            typedef Cylinder< Dimension, Real > FunctionType;
+            using FunctionType = Cylinder< Dimension, Real >;
             return scale
                  * ( (FunctionType*) function )
                       ->template getPartialDerivative< XDiffOrder, YDiffOrder, ZDiffOrder >( vertex, time );
@@ -628,7 +628,7 @@ TestFunction< FunctionDimension, Real, Device >::getTimeDerivative( const PointT
          }
       case flowerpot:
          {
-            typedef Flowerpot< Dimension, Real > FunctionType;
+            using FunctionType = Flowerpot< Dimension, Real >;
             return scale
                  * ( (FunctionType*) function )
                       ->template getPartialDerivative< XDiffOrder, YDiffOrder, ZDiffOrder >( vertex, time );
@@ -636,7 +636,7 @@ TestFunction< FunctionDimension, Real, Device >::getTimeDerivative( const PointT
          }
       case twins:
          {
-            typedef Twins< Dimension, Real > FunctionType;
+            using FunctionType = Twins< Dimension, Real >;
             return scale
                  * ( (FunctionType*) function )
                       ->template getPartialDerivative< XDiffOrder, YDiffOrder, ZDiffOrder >( vertex, time );
@@ -644,7 +644,7 @@ TestFunction< FunctionDimension, Real, Device >::getTimeDerivative( const PointT
          }
       case pseudoSquare:
          {
-            typedef PseudoSquare< Dimension, Real > FunctionType;
+            using FunctionType = PseudoSquare< Dimension, Real >;
             return scale
                  * ( (FunctionType*) function )
                       ->template getPartialDerivative< XDiffOrder, YDiffOrder, ZDiffOrder >( vertex, time );
@@ -652,7 +652,7 @@ TestFunction< FunctionDimension, Real, Device >::getTimeDerivative( const PointT
          }
       case blob:
          {
-            typedef Blob< Dimension, Real > FunctionType;
+            using FunctionType = Blob< Dimension, Real >;
             return scale
                  * ( (FunctionType*) function )
                       ->template getPartialDerivative< XDiffOrder, YDiffOrder, ZDiffOrder >( vertex, time );
@@ -661,21 +661,21 @@ TestFunction< FunctionDimension, Real, Device >::getTimeDerivative( const PointT
 
       case paraboloidSDF:
          {
-            typedef ParaboloidSDF< Dimension, Real > FunctionType;
+            using FunctionType = ParaboloidSDF< Dimension, Real >;
             return scale
                  * ( (FunctionType*) function )
                       ->template getPartialDerivative< XDiffOrder, YDiffOrder, ZDiffOrder >( vertex, time );
          }
       case sinBumpsSDF:
          {
-            typedef SinBumpsSDF< Dimension, Real > FunctionType;
+            using FunctionType = SinBumpsSDF< Dimension, Real >;
             return scale
                  * ( (FunctionType*) function )
                       ->template getPartialDerivative< XDiffOrder, YDiffOrder, ZDiffOrder >( vertex, time );
          }
       case sinWaveSDF:
          {
-            typedef SinWaveSDF< Dimension, Real > FunctionType;
+            using FunctionType = SinWaveSDF< Dimension, Real >;
             return scale
                  * ( (FunctionType*) function )
                       ->template getPartialDerivative< XDiffOrder, YDiffOrder, ZDiffOrder >( vertex, time );
@@ -724,14 +724,14 @@ TestFunction< FunctionDimension, Real, Device >::deleteFunctions()
    switch( functionType ) {
       case constant:
          {
-            typedef Constant< Dimension, Real > FunctionType;
+            using FunctionType = Constant< Dimension, Real >;
             deleteFunction< FunctionType >();
             deleteOperator< Identity< Dimension, Real > >();
             break;
          }
       case paraboloid:
          {
-            typedef Paraboloid< Dimension, Real > FunctionType;
+            using FunctionType = Paraboloid< Dimension, Real >;
             deleteFunction< FunctionType >();
             if( operatorType == identity )
                deleteOperator< Identity< Dimension, Real > >();
@@ -741,63 +741,63 @@ TestFunction< FunctionDimension, Real, Device >::deleteFunctions()
          }
       case expBump:
          {
-            typedef ExpBump< Dimension, Real > FunctionType;
+            using FunctionType = ExpBump< Dimension, Real >;
             deleteFunction< FunctionType >();
             deleteOperator< Identity< Dimension, Real > >();
             break;
          }
       case sinBumps:
          {
-            typedef SinBumps< Dimension, Real > FunctionType;
+            using FunctionType = SinBumps< Dimension, Real >;
             deleteFunction< FunctionType >();
             deleteOperator< Identity< Dimension, Real > >();
             break;
          }
       case sinWave:
          {
-            typedef SinWave< Dimension, Real > FunctionType;
+            using FunctionType = SinWave< Dimension, Real >;
             deleteFunction< FunctionType >();
             deleteOperator< Identity< Dimension, Real > >();
             break;
          }
       case cylinder:
          {
-            typedef Cylinder< Dimension, Real > FunctionType;
+            using FunctionType = Cylinder< Dimension, Real >;
             deleteFunction< FunctionType >();
             deleteOperator< Identity< Dimension, Real > >();
             break;
          }
       case flowerpot:
          {
-            typedef Flowerpot< Dimension, Real > FunctionType;
+            using FunctionType = Flowerpot< Dimension, Real >;
             deleteFunction< FunctionType >();
             deleteOperator< Identity< Dimension, Real > >();
             break;
          }
       case twins:
          {
-            typedef Twins< Dimension, Real > FunctionType;
+            using FunctionType = Twins< Dimension, Real >;
             deleteFunction< FunctionType >();
             deleteOperator< Identity< Dimension, Real > >();
             break;
          }
       case pseudoSquare:
          {
-            typedef PseudoSquare< Dimension, Real > FunctionType;
+            using FunctionType = PseudoSquare< Dimension, Real >;
             deleteFunction< FunctionType >();
             deleteOperator< Identity< Dimension, Real > >();
             break;
          }
       case blob:
          {
-            typedef Blob< Dimension, Real > FunctionType;
+            using FunctionType = Blob< Dimension, Real >;
             deleteFunction< FunctionType >();
             deleteOperator< Identity< Dimension, Real > >();
             break;
          }
       case vectorNorm:
          {
-            typedef VectorNorm< Dimension, Real > FunctionType;
+            using FunctionType = VectorNorm< Dimension, Real >;
             deleteFunction< FunctionType >();
             deleteOperator< Identity< Dimension, Real > >();
             break;
@@ -805,21 +805,21 @@ TestFunction< FunctionDimension, Real, Device >::deleteFunctions()
 
       case paraboloidSDF:
          {
-            typedef ParaboloidSDF< Dimension, Real > FunctionType;
+            using FunctionType = ParaboloidSDF< Dimension, Real >;
             deleteFunction< FunctionType >();
             deleteOperator< Identity< Dimension, Real > >();
             break;
          }
       case sinBumpsSDF:
          {
-            typedef SinBumpsSDF< Dimension, Real > FunctionType;
+            using FunctionType = SinBumpsSDF< Dimension, Real >;
             deleteFunction< FunctionType >();
             deleteOperator< Identity< Dimension, Real > >();
             break;
          }
       case sinWaveSDF:
          {
-            typedef SinWaveSDF< Dimension, Real > FunctionType;
+            using FunctionType = SinWaveSDF< Dimension, Real >;
             deleteFunction< FunctionType >();
             deleteOperator< Identity< Dimension, Real > >();
             break;
diff --git a/src/TNL/Images/DicomSeries.h b/src/TNL/Images/DicomSeries.h
index 269385b1aa..3c9d9fa7c1 100644
--- a/src/TNL/Images/DicomSeries.h
+++ b/src/TNL/Images/DicomSeries.h
@@ -49,7 +49,7 @@ struct ImagesInfo
 class DicomSeries : public Image< int >
 {
 public:
-   typedef int IndexType;
+   using IndexType = int;
 
    inline DicomSeries( const String& filePath );
 
diff --git a/src/TNL/Images/DicomSeries_impl.h b/src/TNL/Images/DicomSeries_impl.h
index a0a5a86b24..82d7c55ddb 100644
--- a/src/TNL/Images/DicomSeries_impl.h
+++ b/src/TNL/Images/DicomSeries_impl.h
@@ -78,7 +78,7 @@ DicomSeries::getImage( const int imageIdx,
 {
 #ifdef HAVE_DCMTK_H
    const Uint16* imageData = this->getData( imageIdx );
-   typedef Meshes::Grid< 2, Real, Device, Index > GridType;
+   using GridType = Meshes::Grid< 2, Real, Device, Index >;
    typename GridType::Cell cell( grid );
 
    Index i, j;
diff --git a/src/TNL/Images/Image.h b/src/TNL/Images/Image.h
index d542546e95..c17e22ddc6 100644
--- a/src/TNL/Images/Image.h
+++ b/src/TNL/Images/Image.h
@@ -16,7 +16,7 @@ template< typename Index = int >
 class Image
 {
 public:
-   typedef Index IndexType;
+   using IndexType = Index;
 
    Image() : width( 0 ), height( 0 ){};
 
diff --git a/src/TNL/Images/JPEGImage.h b/src/TNL/Images/JPEGImage.h
index 4ac7e2733e..65c23cc7f1 100644
--- a/src/TNL/Images/JPEGImage.h
+++ b/src/TNL/Images/JPEGImage.h
@@ -29,7 +29,7 @@ template< typename Index = int >
 class JPEGImage : public Image< Index >
 {
 public:
-   typedef Index IndexType;
+   using IndexType = Index;
 
    JPEGImage();
 
diff --git a/src/TNL/Images/JPEGImage_impl.h b/src/TNL/Images/JPEGImage_impl.h
index 8b0e9e63a3..5e642df1b8 100644
--- a/src/TNL/Images/JPEGImage_impl.h
+++ b/src/TNL/Images/JPEGImage_impl.h
@@ -92,7 +92,7 @@ JPEGImage< Index >::read( const RegionOfInterest< Index > roi,
                           Functions::MeshFunction< Meshes::Grid< 2, MeshReal, Device, Index >, 2, Real >& function )
 {
 #ifdef HAVE_JPEG_H
-   typedef Meshes::Grid< 2, Real, Device, Index > GridType;
+   using GridType = Meshes::Grid< 2, Real, Device, Index >;
    const GridType& grid = function.getMesh();
    typename GridType::Cell cell( grid );
 
@@ -201,7 +201,7 @@ template< typename Real, typename Device, typename Vector >
 bool
 JPEGImage< Index >::write( const Meshes::Grid< 2, Real, Device, Index >& grid, Vector& vector )
 {
-   typedef Meshes::Grid< 2, Real, Device, Index > GridType;
+   using GridType = Meshes::Grid< 2, Real, Device, Index >;
    typename GridType::Cell cell( grid );
 
 #ifdef HAVE_JPEG_H
@@ -236,7 +236,7 @@ template< typename MeshReal, typename Device, typename Real >
 bool
 JPEGImage< Index >::write( const Functions::MeshFunction< Meshes::Grid< 2, MeshReal, Device, Index >, 2, Real >& function )
 {
-   typedef Meshes::Grid< 2, Real, Device, Index > GridType;
+   using GridType = Meshes::Grid< 2, Real, Device, Index >;
    const GridType& grid = function.getMesh();
    typename GridType::Cell cell( grid );
 
diff --git a/src/TNL/Images/PGMImage.h b/src/TNL/Images/PGMImage.h
index b86ead2966..8fc3d7c3d5 100644
--- a/src/TNL/Images/PGMImage.h
+++ b/src/TNL/Images/PGMImage.h
@@ -20,7 +20,7 @@ template< typename Index = int >
 class PGMImage : public Image< Index >
 {
 public:
-   typedef Index IndexType;
+   using IndexType = Index;
 
    PGMImage();
 
diff --git a/src/TNL/Images/PGMImage_impl.h b/src/TNL/Images/PGMImage_impl.h
index 24fd483b42..d14575925d 100644
--- a/src/TNL/Images/PGMImage_impl.h
+++ b/src/TNL/Images/PGMImage_impl.h
@@ -73,7 +73,7 @@ bool
 PGMImage< Index >::read( const RegionOfInterest< Index > roi,
                          Functions::MeshFunction< Meshes::Grid< 2, MeshReal, Device, Index >, 2, Real >& function )
 {
-   typedef Meshes::Grid< 2, Real, Device, Index > GridType;
+   using GridType = Meshes::Grid< 2, Real, Device, Index >;
    const GridType& grid = function.getMesh();
    typename GridType::Cell cell( grid );
 
@@ -138,7 +138,7 @@ template< typename Real, typename Device, typename Vector >
 bool
 PGMImage< Index >::write( const Meshes::Grid< 2, Real, Device, Index >& grid, Vector& vector )
 {
-   typedef Meshes::Grid< 2, Real, Device, Index > GridType;
+   using GridType = Meshes::Grid< 2, Real, Device, Index >;
    typename GridType::Cell cell( grid );
 
    Index i, j;
@@ -171,7 +171,7 @@ template< typename MeshReal, typename Device, typename Real >
 bool
 PGMImage< Index >::write( const Functions::MeshFunction< Meshes::Grid< 2, MeshReal, Device, Index >, 2, Real >& function )
 {
-   typedef Meshes::Grid< 2, Real, Device, Index > GridType;
+   using GridType = Meshes::Grid< 2, Real, Device, Index >;
    const GridType& grid = function.getMesh();
    typename GridType::Cell cell( grid );
 
diff --git a/src/TNL/Images/PNGImage_impl.h b/src/TNL/Images/PNGImage_impl.h
index 69acf21d9e..8e812a1c26 100644
--- a/src/TNL/Images/PNGImage_impl.h
+++ b/src/TNL/Images/PNGImage_impl.h
@@ -101,7 +101,7 @@ PNGImage< Index >::read( const RegionOfInterest< Index > roi,
                          Functions::MeshFunction< Meshes::Grid< 2, MeshReal, Device, Index >, 2, Real >& function )
 {
 #ifdef HAVE_PNG_H
-   typedef Meshes::Grid< 2, MeshReal, Device, Index > GridType;
+   using GridType = Meshes::Grid< 2, MeshReal, Device, Index >;
    const GridType& grid = function.getMesh();
    typename GridType::Cell cell( grid );
 
@@ -249,7 +249,7 @@ bool
 PNGImage< Index >::write( const Meshes::Grid< 2, Real, Device, Index >& grid, Vector& vector )
 {
 #ifdef HAVE_PNG_H
-   typedef Meshes::Grid< 2, Real, Device, Index > GridType;
+   using GridType = Meshes::Grid< 2, Real, Device, Index >;
    typename GridType::Cell cell( grid );
 
    /***
@@ -287,7 +287,7 @@ bool
 PNGImage< Index >::write( const Functions::MeshFunction< Meshes::Grid< 2, MeshReal, Device, Index >, 2, Real >& function )
 {
 #ifdef HAVE_PNG_H
-   typedef Meshes::Grid< 2, Real, Device, Index > GridType;
+   using GridType = Meshes::Grid< 2, Real, Device, Index >;
    const GridType& grid = function.getMesh();
    typename GridType::Cell cell( grid );
 
diff --git a/src/TNL/Matrices/MatrixReader.h b/src/TNL/Matrices/MatrixReader.h
index 18aa7408b3..91a4f525e4 100644
--- a/src/TNL/Matrices/MatrixReader.h
+++ b/src/TNL/Matrices/MatrixReader.h
@@ -80,17 +80,17 @@ public:
    /**
     * \brief Type of matrix elements values.
     */
-   typedef typename Matrix::RealType RealType;
+   using RealType = typename Matrix::RealType;
 
    /**
     * \brief Device where the matrix is allocated.
     */
-   typedef typename Matrix::DeviceType DeviceType;
+   using DeviceType = typename Matrix::DeviceType;
 
    /**
     * \brief Type used for indexing of matrix elements.
     */
-   typedef typename Matrix::IndexType IndexType;
+   using IndexType = typename Matrix::IndexType;
 
    /**
     * \brief Method for importing matrix from file with given filename.
diff --git a/src/TNL/Matrices/MatrixSetter.h b/src/TNL/Matrices/MatrixSetter.h
index 51cb1251ca..d21ffe220a 100644
--- a/src/TNL/Matrices/MatrixSetter.h
+++ b/src/TNL/Matrices/MatrixSetter.h
@@ -15,7 +15,7 @@ template< typename DifferentialOperator, typename BoundaryConditions, typename R
 class MatrixSetterTraverserUserData
 {
 public:
-   typedef typename RowsCapacitiesType::DeviceType DeviceType;
+   using DeviceType = typename RowsCapacitiesType::DeviceType;
 
    const DifferentialOperator* differentialOperator;
 
@@ -34,14 +34,14 @@ template< typename Mesh, typename DifferentialOperator, typename BoundaryConditi
 class MatrixSetter
 {
 public:
-   typedef Mesh MeshType;
-   typedef Pointers::SharedPointer< MeshType > MeshPointer;
-   typedef typename MeshType::DeviceType DeviceType;
-   typedef typename RowsCapacitiesType::RealType IndexType;
-   typedef MatrixSetterTraverserUserData< DifferentialOperator, BoundaryConditions, RowsCapacitiesType > TraverserUserData;
-   typedef Pointers::SharedPointer< DifferentialOperator, DeviceType > DifferentialOperatorPointer;
-   typedef Pointers::SharedPointer< BoundaryConditions, DeviceType > BoundaryConditionsPointer;
-   typedef Pointers::SharedPointer< RowsCapacitiesType, DeviceType > RowsCapacitiesTypePointer;
+   using MeshType = Mesh;
+   using MeshPointer = Pointers::SharedPointer< MeshType >;
+   using DeviceType = typename MeshType::DeviceType;
+   using IndexType = typename RowsCapacitiesType::RealType;
+   using TraverserUserData = MatrixSetterTraverserUserData< DifferentialOperator, BoundaryConditions, RowsCapacitiesType >;
+   using DifferentialOperatorPointer = Pointers::SharedPointer< DifferentialOperator, DeviceType >;
+   using BoundaryConditionsPointer = Pointers::SharedPointer< BoundaryConditions, DeviceType >;
+   using RowsCapacitiesTypePointer = Pointers::SharedPointer< RowsCapacitiesType, DeviceType >;
 
    template< typename EntityType >
    void
diff --git a/src/TNL/Meshes/DistributedMeshes/CopyEntitiesHelper.h b/src/TNL/Meshes/DistributedMeshes/CopyEntitiesHelper.h
index 7ade51c3b3..15c168d4e2 100644
--- a/src/TNL/Meshes/DistributedMeshes/CopyEntitiesHelper.h
+++ b/src/TNL/Meshes/DistributedMeshes/CopyEntitiesHelper.h
@@ -19,9 +19,9 @@ template< typename MeshFunctionType >
 class CopyEntitiesHelper< MeshFunctionType, 1 >
 {
 public:
-   typedef typename MeshFunctionType::MeshType::CoordinatesType CoordinatesType;
-   typedef typename MeshFunctionType::MeshType::Cell Cell;
-   typedef typename MeshFunctionType::MeshType::GlobalIndexType Index;
+   using CoordinatesType = typename MeshFunctionType::MeshType::CoordinatesType;
+   using Cell = typename MeshFunctionType::MeshType::Cell;
+   using Index = typename MeshFunctionType::MeshType::GlobalIndexType;
 
    template< typename FromFunction >
    static void
@@ -50,9 +50,9 @@ template< typename MeshFunctionType >
 class CopyEntitiesHelper< MeshFunctionType, 2 >
 {
 public:
-   typedef typename MeshFunctionType::MeshType::CoordinatesType CoordinatesType;
-   typedef typename MeshFunctionType::MeshType::Cell Cell;
-   typedef typename MeshFunctionType::MeshType::GlobalIndexType Index;
+   using CoordinatesType = typename MeshFunctionType::MeshType::CoordinatesType;
+   using Cell = typename MeshFunctionType::MeshType::Cell;
+   using Index = typename MeshFunctionType::MeshType::GlobalIndexType;
 
    template< typename FromFunction >
    static void
@@ -83,9 +83,9 @@ template< typename MeshFunctionType >
 class CopyEntitiesHelper< MeshFunctionType, 3 >
 {
 public:
-   typedef typename MeshFunctionType::MeshType::CoordinatesType CoordinatesType;
-   typedef typename MeshFunctionType::MeshType::Cell Cell;
-   typedef typename MeshFunctionType::MeshType::GlobalIndexType Index;
+   using CoordinatesType = typename MeshFunctionType::MeshType::CoordinatesType;
+   using Cell = typename MeshFunctionType::MeshType::Cell;
+   using Index = typename MeshFunctionType::MeshType::GlobalIndexType;
 
    template< typename FromFunction >
    static void
diff --git a/src/TNL/Meshes/DistributedMeshes/DistributedGridSynchronizer.h b/src/TNL/Meshes/DistributedMeshes/DistributedGridSynchronizer.h
index 7d5e527345..48c75b882f 100644
--- a/src/TNL/Meshes/DistributedMeshes/DistributedGridSynchronizer.h
+++ b/src/TNL/Meshes/DistributedMeshes/DistributedGridSynchronizer.h
@@ -23,9 +23,9 @@ template< int MeshDimension, typename Index, typename Device, typename GridReal
 class DistributedMeshSynchronizer< DistributedMesh< Grid< MeshDimension, GridReal, Device, Index > >, MeshDimension >
 {
 public:
-   typedef typename Grid< MeshDimension, GridReal, Device, Index >::Cell Cell;
-   typedef DistributedMesh< Grid< MeshDimension, GridReal, Device, Index > > DistributedGridType;
-   typedef typename DistributedGridType::CoordinatesType CoordinatesType;
+   using Cell = typename Grid< MeshDimension, GridReal, Device, Index >::Cell;
+   using DistributedGridType = DistributedMesh< Grid< MeshDimension, GridReal, Device, Index > >;
+   using CoordinatesType = typename DistributedGridType::CoordinatesType;
    using SubdomainOverlapsType = typename DistributedGridType::SubdomainOverlapsType;
 
    static constexpr int
diff --git a/src/TNL/Meshes/DummyMesh.h b/src/TNL/Meshes/DummyMesh.h
index db35318f92..4e87567776 100644
--- a/src/TNL/Meshes/DummyMesh.h
+++ b/src/TNL/Meshes/DummyMesh.h
@@ -15,9 +15,9 @@ template< typename Real = double, typename Device = Devices::Host, typename Inde
 class DummyMesh
 {
 public:
-   typedef Real RealType;
-   typedef Device DeviceType;
-   typedef Index IndexType;
+   using RealType = Real;
+   using DeviceType = Device;
+   using IndexType = Index;
 
    constexpr static int
    getMeshDimension()
diff --git a/src/TNL/Meshes/GridDetails/BoundaryGridEntityChecker.h b/src/TNL/Meshes/GridDetails/BoundaryGridEntityChecker.h
index 706c301f69..6a4d798b23 100644
--- a/src/TNL/Meshes/GridDetails/BoundaryGridEntityChecker.h
+++ b/src/TNL/Meshes/GridDetails/BoundaryGridEntityChecker.h
@@ -20,8 +20,8 @@ template< typename Real, typename Device, typename Index, typename Config >
 class BoundaryGridEntityChecker< GridEntity< Meshes::Grid< 1, Real, Device, Index >, 1, Config > >
 {
 public:
-   typedef Meshes::Grid< 1, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, 1, Config > GridEntityType;
+   using GridType = Meshes::Grid< 1, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, 1, Config >;
 
    __cuda_callable__
    inline static bool
@@ -35,8 +35,8 @@ template< typename Real, typename Device, typename Index, typename Config >
 class BoundaryGridEntityChecker< GridEntity< Meshes::Grid< 1, Real, Device, Index >, 0, Config > >
 {
 public:
-   typedef Meshes::Grid< 1, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, 0, Config > GridEntityType;
+   using GridType = Meshes::Grid< 1, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, 0, Config >;
 
    __cuda_callable__
    inline static bool
@@ -53,8 +53,8 @@ template< typename Real, typename Device, typename Index, typename Config >
 class BoundaryGridEntityChecker< GridEntity< Meshes::Grid< 2, Real, Device, Index >, 2, Config > >
 {
 public:
-   typedef Meshes::Grid< 2, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, 2, Config > GridEntityType;
+   using GridType = Meshes::Grid< 2, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, 2, Config >;
 
    __cuda_callable__
    inline static bool
@@ -70,8 +70,8 @@ template< typename Real, typename Device, typename Index, typename Config >
 class BoundaryGridEntityChecker< GridEntity< Meshes::Grid< 2, Real, Device, Index >, 1, Config > >
 {
 public:
-   typedef Meshes::Grid< 2, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, 1, Config > GridEntityType;
+   using GridType = Meshes::Grid< 2, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, 1, Config >;
 
    __cuda_callable__
    inline static bool
@@ -90,8 +90,8 @@ template< typename Real, typename Device, typename Index, typename Config >
 class BoundaryGridEntityChecker< GridEntity< Meshes::Grid< 2, Real, Device, Index >, 0, Config > >
 {
 public:
-   typedef Meshes::Grid< 2, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, 0, Config > GridEntityType;
+   using GridType = Meshes::Grid< 2, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, 0, Config >;
 
    __cuda_callable__
    inline static bool
@@ -110,8 +110,8 @@ template< typename Real, typename Device, typename Index, typename Config >
 class BoundaryGridEntityChecker< GridEntity< Meshes::Grid< 3, Real, Device, Index >, 3, Config > >
 {
 public:
-   typedef Meshes::Grid< 3, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, 3, Config > GridEntityType;
+   using GridType = Meshes::Grid< 3, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, 3, Config >;
 
    __cuda_callable__
    inline static bool
@@ -128,8 +128,8 @@ template< typename Real, typename Device, typename Index, typename Config >
 class BoundaryGridEntityChecker< GridEntity< Meshes::Grid< 3, Real, Device, Index >, 2, Config > >
 {
 public:
-   typedef Meshes::Grid< 3, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, 2, Config > GridEntityType;
+   using GridType = Meshes::Grid< 3, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, 2, Config >;
 
    __cuda_callable__
    inline static bool
@@ -150,8 +150,8 @@ template< typename Real, typename Device, typename Index, typename Config >
 class BoundaryGridEntityChecker< GridEntity< Meshes::Grid< 3, Real, Device, Index >, 1, Config > >
 {
 public:
-   typedef Meshes::Grid< 3, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, 1, Config > GridEntityType;
+   using GridType = Meshes::Grid< 3, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, 1, Config >;
 
    __cuda_callable__
    inline static bool
@@ -176,8 +176,8 @@ template< typename Real, typename Device, typename Index, typename Config >
 class BoundaryGridEntityChecker< GridEntity< Meshes::Grid< 3, Real, Device, Index >, 0, Config > >
 {
 public:
-   typedef Meshes::Grid< 3, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, 0, Config > GridEntityType;
+   using GridType = Meshes::Grid< 3, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, 0, Config >;
 
    __cuda_callable__
    inline static bool
diff --git a/src/TNL/Meshes/GridDetails/Grid1D.h b/src/TNL/Meshes/GridDetails/Grid1D.h
index 69d538af1e..9864b44002 100644
--- a/src/TNL/Meshes/GridDetails/Grid1D.h
+++ b/src/TNL/Meshes/GridDetails/Grid1D.h
@@ -28,7 +28,7 @@ public:
    using CoordinatesType = Containers::StaticVector< 1, Index >;
 
    // TODO: deprecated and to be removed (GlobalIndexType shall be used instead)
-   typedef Index IndexType;
+   using IndexType = Index;
 
    /**
     * \brief Returns number of this mesh grid dimensions.
@@ -42,9 +42,9 @@ public:
    template< int EntityDimension, typename Config = GridEntityCrossStencilStorage< 1 > >
    using EntityType = GridEntity< Grid, EntityDimension, Config >;
 
-   typedef EntityType< getMeshDimension(), GridEntityCrossStencilStorage< 1 > > Cell;
-   typedef EntityType< 0 > Face;
-   typedef EntityType< 0 > Vertex;
+   using Cell = EntityType< getMeshDimension(), GridEntityCrossStencilStorage< 1 > >;
+   using Face = EntityType< 0 >;
+   using Vertex = EntityType< 0 >;
 
    /**
     * \brief Basic constructor.
diff --git a/src/TNL/Meshes/GridDetails/Grid2D.h b/src/TNL/Meshes/GridDetails/Grid2D.h
index fd24e99899..48ea6231bf 100644
--- a/src/TNL/Meshes/GridDetails/Grid2D.h
+++ b/src/TNL/Meshes/GridDetails/Grid2D.h
@@ -21,14 +21,14 @@ template< typename Real, typename Device, typename Index >
 class Grid< 2, Real, Device, Index >
 {
 public:
-   typedef Real RealType;
-   typedef Device DeviceType;
-   typedef Index GlobalIndexType;
-   typedef Containers::StaticVector< 2, Real > PointType;
-   typedef Containers::StaticVector< 2, Index > CoordinatesType;
+   using RealType = Real;
+   using DeviceType = Device;
+   using GlobalIndexType = Index;
+   using PointType = Containers::StaticVector< 2, Real >;
+   using CoordinatesType = Containers::StaticVector< 2, Index >;
 
    // TODO: deprecated and to be removed (GlobalIndexType shall be used instead)
-   typedef Index IndexType;
+   using IndexType = Index;
 
    static constexpr int
    getMeshDimension()
@@ -39,9 +39,9 @@ public:
    template< int EntityDimension, typename Config = GridEntityCrossStencilStorage< 1 > >
    using EntityType = GridEntity< Grid, EntityDimension, Config >;
 
-   typedef EntityType< getMeshDimension(), GridEntityCrossStencilStorage< 1 > > Cell;
-   typedef EntityType< getMeshDimension() - 1 > Face;
-   typedef EntityType< 0 > Vertex;
+   using Cell = EntityType< getMeshDimension(), GridEntityCrossStencilStorage< 1 > >;
+   using Face = EntityType< getMeshDimension() - 1 >;
+   using Vertex = EntityType< 0 >;
 
    /**
     * \brief See Grid1D::Grid().
diff --git a/src/TNL/Meshes/GridDetails/Grid3D.h b/src/TNL/Meshes/GridDetails/Grid3D.h
index d65b04f6fd..6224f959f3 100644
--- a/src/TNL/Meshes/GridDetails/Grid3D.h
+++ b/src/TNL/Meshes/GridDetails/Grid3D.h
@@ -21,14 +21,14 @@ template< typename Real, typename Device, typename Index >
 class Grid< 3, Real, Device, Index >
 {
 public:
-   typedef Real RealType;
-   typedef Device DeviceType;
-   typedef Index GlobalIndexType;
-   typedef Containers::StaticVector< 3, Real > PointType;
-   typedef Containers::StaticVector< 3, Index > CoordinatesType;
+   using RealType = Real;
+   using DeviceType = Device;
+   using GlobalIndexType = Index;
+   using PointType = Containers::StaticVector< 3, Real >;
+   using CoordinatesType = Containers::StaticVector< 3, Index >;
 
    // TODO: deprecated and to be removed (GlobalIndexType shall be used instead)
-   typedef Index IndexType;
+   using IndexType = Index;
 
    static constexpr int
    getMeshDimension()
@@ -39,10 +39,10 @@ public:
    template< int EntityDimension, typename Config = GridEntityCrossStencilStorage< 1 > >
    using EntityType = GridEntity< Grid, EntityDimension, Config >;
 
-   typedef EntityType< getMeshDimension(), GridEntityCrossStencilStorage< 1 > > Cell;
-   typedef EntityType< getMeshDimension() - 1 > Face;
-   typedef EntityType< 1 > Edge;
-   typedef EntityType< 0 > Vertex;
+   using Cell = EntityType< getMeshDimension(), GridEntityCrossStencilStorage< 1 > >;
+   using Face = EntityType< getMeshDimension() - 1 >;
+   using Edge = EntityType< 1 >;
+   using Vertex = EntityType< 0 >;
 
    /**
     * \brief See Grid1D::Grid().
diff --git a/src/TNL/Meshes/GridDetails/GridEntityCenterGetter.h b/src/TNL/Meshes/GridDetails/GridEntityCenterGetter.h
index 11b23f1253..af30ce8f97 100644
--- a/src/TNL/Meshes/GridDetails/GridEntityCenterGetter.h
+++ b/src/TNL/Meshes/GridDetails/GridEntityCenterGetter.h
@@ -20,9 +20,9 @@ template< typename Real, typename Device, typename Index, typename Config >
 class GridEntityCenterGetter< GridEntity< Meshes::Grid< 1, Real, Device, Index >, 1, Config > >
 {
 public:
-   typedef Meshes::Grid< 1, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, 1, Config > GridEntityType;
-   typedef typename GridType::PointType PointType;
+   using GridType = Meshes::Grid< 1, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, 1, Config >;
+   using PointType = typename GridType::PointType;
 
    __cuda_callable__
    inline static PointType
@@ -37,9 +37,9 @@ template< typename Real, typename Device, typename Index, typename Config >
 class GridEntityCenterGetter< GridEntity< Meshes::Grid< 1, Real, Device, Index >, 0, Config > >
 {
 public:
-   typedef Meshes::Grid< 1, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, 0, Config > GridEntityType;
-   typedef typename GridType::PointType PointType;
+   using GridType = Meshes::Grid< 1, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, 0, Config >;
+   using PointType = typename GridType::PointType;
 
    __cuda_callable__
    inline static PointType
@@ -57,9 +57,9 @@ template< typename Real, typename Device, typename Index, typename Config >
 class GridEntityCenterGetter< GridEntity< Meshes::Grid< 2, Real, Device, Index >, 2, Config > >
 {
 public:
-   typedef Meshes::Grid< 2, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, 2, Config > GridEntityType;
-   typedef typename GridType::PointType PointType;
+   using GridType = Meshes::Grid< 2, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, 2, Config >;
+   using PointType = typename GridType::PointType;
 
    __cuda_callable__
    inline static PointType
@@ -75,9 +75,9 @@ template< typename Real, typename Device, typename Index, typename Config >
 class GridEntityCenterGetter< GridEntity< Meshes::Grid< 2, Real, Device, Index >, 1, Config > >
 {
 public:
-   typedef Meshes::Grid< 2, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, 1, Config > GridEntityType;
-   typedef typename GridType::PointType PointType;
+   using GridType = Meshes::Grid< 2, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, 1, Config >;
+   using PointType = typename GridType::PointType;
 
    __cuda_callable__
    inline static PointType
@@ -94,9 +94,9 @@ template< typename Real, typename Device, typename Index, typename Config >
 class GridEntityCenterGetter< GridEntity< Meshes::Grid< 2, Real, Device, Index >, 0, Config > >
 {
 public:
-   typedef Meshes::Grid< 2, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, 0, Config > GridEntityType;
-   typedef typename GridType::PointType PointType;
+   using GridType = Meshes::Grid< 2, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, 0, Config >;
+   using PointType = typename GridType::PointType;
 
    __cuda_callable__
    inline static PointType
@@ -115,9 +115,9 @@ template< typename Real, typename Device, typename Index, int EntityDimension, t
 class GridEntityCenterGetter< GridEntity< Meshes::Grid< 3, Real, Device, Index >, EntityDimension, Config > >
 {
 public:
-   typedef Meshes::Grid< 3, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, EntityDimension, Config > GridEntityType;
-   typedef typename GridType::PointType PointType;
+   using GridType = Meshes::Grid< 3, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, EntityDimension, Config >;
+   using PointType = typename GridType::PointType;
 
    __cuda_callable__
    inline static PointType
@@ -135,9 +135,9 @@ template< typename Real, typename Device, typename Index, typename Config >
 class GridEntityCenterGetter< GridEntity< Meshes::Grid< 3, Real, Device, Index >, 3, Config > >
 {
 public:
-   typedef Meshes::Grid< 3, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, 3, Config > GridEntityType;
-   typedef typename GridType::PointType PointType;
+   using GridType = Meshes::Grid< 3, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, 3, Config >;
+   using PointType = typename GridType::PointType;
 
    __cuda_callable__
    inline static PointType
@@ -154,9 +154,9 @@ template< typename Real, typename Device, typename Index, typename Config >
 class GridEntityCenterGetter< GridEntity< Meshes::Grid< 3, Real, Device, Index >, 0, Config > >
 {
 public:
-   typedef Meshes::Grid< 3, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, 0, Config > GridEntityType;
-   typedef typename GridType::PointType PointType;
+   using GridType = Meshes::Grid< 3, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, 0, Config >;
+   using PointType = typename GridType::PointType;
 
    __cuda_callable__
    inline static PointType
diff --git a/src/TNL/Meshes/GridDetails/GridEntityGetter_impl.h b/src/TNL/Meshes/GridDetails/GridEntityGetter_impl.h
index d0cf77fa4d..15da79e9e0 100644
--- a/src/TNL/Meshes/GridDetails/GridEntityGetter_impl.h
+++ b/src/TNL/Meshes/GridDetails/GridEntityGetter_impl.h
@@ -23,9 +23,9 @@ class GridEntityGetter< Meshes::Grid< 1, Real, Device, Index >, GridEntity, Enti
 public:
    static constexpr int entityDimension = EntityDimension;
 
-   typedef Meshes::Grid< 1, Real, Device, Index > GridType;
-   typedef typename GridType::IndexType IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
+   using GridType = Meshes::Grid< 1, Real, Device, Index >;
+   using IndexType = typename GridType::IndexType;
+   using CoordinatesType = typename GridType::CoordinatesType;
    // typedef typename GridType::template GridEntity< entityDimension > GridEntity;
 
    __cuda_callable__
@@ -60,9 +60,9 @@ class GridEntityGetter< Meshes::Grid< 2, Real, Device, Index >, GridEntity, 2 >
 public:
    static constexpr int entityDimension = 2;
 
-   typedef Meshes::Grid< 2, Real, Device, Index > GridType;
-   typedef typename GridType::IndexType IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
+   using GridType = Meshes::Grid< 2, Real, Device, Index >;
+   using IndexType = typename GridType::IndexType;
+   using CoordinatesType = typename GridType::CoordinatesType;
    // typedef typename GridType::template GridEntity< entityDimension > GridEntity;
 
    __cuda_callable__
@@ -100,9 +100,9 @@ class GridEntityGetter< Meshes::Grid< 2, Real, Device, Index >, GridEntity, 1 >
 public:
    static constexpr int entityDimension = 1;
 
-   typedef Meshes::Grid< 2, Real, Device, Index > GridType;
-   typedef typename GridType::IndexType IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
+   using GridType = Meshes::Grid< 2, Real, Device, Index >;
+   using IndexType = typename GridType::IndexType;
+   using CoordinatesType = typename GridType::CoordinatesType;
    // typedef typename GridType::template GridEntity< entityDimension, EntityConfig > GridEntity;
 
    __cuda_callable__
@@ -151,9 +151,9 @@ class GridEntityGetter< Meshes::Grid< 2, Real, Device, Index >, GridEntity, 0 >
 public:
    static constexpr int entityDimension = 0;
 
-   typedef Meshes::Grid< 2, Real, Device, Index > GridType;
-   typedef typename GridType::IndexType IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
+   using GridType = Meshes::Grid< 2, Real, Device, Index >;
+   using IndexType = typename GridType::IndexType;
+   using CoordinatesType = typename GridType::CoordinatesType;
    // typedef typename GridType::template GridEntity< entityDimension > GridEntity;
 
    __cuda_callable__
@@ -195,9 +195,9 @@ class GridEntityGetter< Meshes::Grid< 3, Real, Device, Index >, GridEntity, 3 >
 public:
    static constexpr int entityDimension = 3;
 
-   typedef Meshes::Grid< 3, Real, Device, Index > GridType;
-   typedef typename GridType::IndexType IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
+   using GridType = Meshes::Grid< 3, Real, Device, Index >;
+   using IndexType = typename GridType::IndexType;
+   using CoordinatesType = typename GridType::CoordinatesType;
    // typedef typename GridType::template GridEntity< entityDimension > GridEntity;
 
    __cuda_callable__
@@ -237,9 +237,9 @@ class GridEntityGetter< Meshes::Grid< 3, Real, Device, Index >, GridEntity, 2 >
 public:
    static constexpr int entityDimension = 2;
 
-   typedef Meshes::Grid< 3, Real, Device, Index > GridType;
-   typedef typename GridType::IndexType IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
+   using GridType = Meshes::Grid< 3, Real, Device, Index >;
+   using IndexType = typename GridType::IndexType;
+   using CoordinatesType = typename GridType::CoordinatesType;
    // typedef typename GridType::template GridEntity< entityDimension > GridEntity;
 
    __cuda_callable__
@@ -303,9 +303,9 @@ class GridEntityGetter< Meshes::Grid< 3, Real, Device, Index >, GridEntity, 1 >
 public:
    static constexpr int entityDimension = 1;
 
-   typedef Meshes::Grid< 3, Real, Device, Index > GridType;
-   typedef typename GridType::IndexType IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
+   using GridType = Meshes::Grid< 3, Real, Device, Index >;
+   using IndexType = typename GridType::IndexType;
+   using CoordinatesType = typename GridType::CoordinatesType;
    // typedef typename GridType::template GridEntity< entityDimension > GridEntity;
 
    __cuda_callable__
@@ -369,9 +369,9 @@ class GridEntityGetter< Meshes::Grid< 3, Real, Device, Index >, GridEntity, 0 >
 public:
    static constexpr int entityDimension = 0;
 
-   typedef Meshes::Grid< 3, Real, Device, Index > GridType;
-   typedef typename GridType::IndexType IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
+   using GridType = Meshes::Grid< 3, Real, Device, Index >;
+   using IndexType = typename GridType::IndexType;
+   using CoordinatesType = typename GridType::CoordinatesType;
    // typedef typename GridType::template GridEntity< entityDimension > GridEntity;
 
    __cuda_callable__
diff --git a/src/TNL/Meshes/GridDetails/GridEntityMeasureGetter.h b/src/TNL/Meshes/GridDetails/GridEntityMeasureGetter.h
index 0a3ba1eebe..f4e3f1f409 100644
--- a/src/TNL/Meshes/GridDetails/GridEntityMeasureGetter.h
+++ b/src/TNL/Meshes/GridDetails/GridEntityMeasureGetter.h
@@ -20,7 +20,7 @@ template< int Dimension, typename Real, typename Device, typename Index >
 class GridEntityMeasureGetter< Meshes::Grid< Dimension, Real, Device, Index >, 0 >
 {
 public:
-   typedef Meshes::Grid< Dimension, Real, Device, Index > GridType;
+   using GridType = Meshes::Grid< Dimension, Real, Device, Index >;
 
    template< typename EntityType >
    __cuda_callable__
@@ -39,7 +39,7 @@ template< typename Real, typename Device, typename Index >
 class GridEntityMeasureGetter< Meshes::Grid< 1, Real, Device, Index >, 1 >
 {
 public:
-   typedef Meshes::Grid< 1, Real, Device, Index > GridType;
+   using GridType = Meshes::Grid< 1, Real, Device, Index >;
 
    template< typename EntityType >
    __cuda_callable__
@@ -57,7 +57,7 @@ template< typename Real, typename Device, typename Index >
 class GridEntityMeasureGetter< Meshes::Grid< 2, Real, Device, Index >, 2 >
 {
 public:
-   typedef Meshes::Grid< 2, Real, Device, Index > GridType;
+   using GridType = Meshes::Grid< 2, Real, Device, Index >;
 
    template< typename EntityType >
    __cuda_callable__
@@ -72,7 +72,7 @@ template< typename Real, typename Device, typename Index >
 class GridEntityMeasureGetter< Meshes::Grid< 2, Real, Device, Index >, 1 >
 {
 public:
-   typedef Meshes::Grid< 2, Real, Device, Index > GridType;
+   using GridType = Meshes::Grid< 2, Real, Device, Index >;
 
    template< typename EntityType >
    __cuda_callable__
@@ -93,7 +93,7 @@ template< typename Real, typename Device, typename Index >
 class GridEntityMeasureGetter< Meshes::Grid< 3, Real, Device, Index >, 3 >
 {
 public:
-   typedef Meshes::Grid< 3, Real, Device, Index > GridType;
+   using GridType = Meshes::Grid< 3, Real, Device, Index >;
 
    template< typename EntityType >
    __cuda_callable__
@@ -108,7 +108,7 @@ template< typename Real, typename Device, typename Index >
 class GridEntityMeasureGetter< Meshes::Grid< 3, Real, Device, Index >, 2 >
 {
 public:
-   typedef Meshes::Grid< 3, Real, Device, Index > GridType;
+   using GridType = Meshes::Grid< 3, Real, Device, Index >;
 
    template< typename EntityType >
    __cuda_callable__
@@ -128,7 +128,7 @@ template< typename Real, typename Device, typename Index >
 class GridEntityMeasureGetter< Meshes::Grid< 3, Real, Device, Index >, 1 >
 {
 public:
-   typedef Meshes::Grid< 3, Real, Device, Index > GridType;
+   using GridType = Meshes::Grid< 3, Real, Device, Index >;
 
    template< typename EntityType >
    __cuda_callable__
diff --git a/src/TNL/Meshes/GridDetails/GridEntityTopology.h b/src/TNL/Meshes/GridDetails/GridEntityTopology.h
index 43ecf61002..3f4d0baaec 100644
--- a/src/TNL/Meshes/GridDetails/GridEntityTopology.h
+++ b/src/TNL/Meshes/GridDetails/GridEntityTopology.h
@@ -13,15 +13,15 @@ template< typename Grid, int EntityDimension, typename EntityOrientation_, typen
 class GridEntityTopology
 {
 public:
-   typedef Grid GridType;
+   using GridType = Grid;
 
    static constexpr int meshDimension = GridType::getMeshDimension();
 
    static constexpr int entityDimension = EntityDimension;
 
-   typedef EntityOrientation_ EntityOrientation;
+   using EntityOrientation = EntityOrientation_;
 
-   typedef EntityProportions_ EntityProportions;
+   using EntityProportions = EntityProportions_;
 
    // TODO: restore when CUDA allows it
    // static_assert( meshDimension == EntityOrientation_::size,
diff --git a/src/TNL/Meshes/GridDetails/GridEntity_impl.h b/src/TNL/Meshes/GridDetails/GridEntity_impl.h
index 1fa5d0ea50..6fdb0a85f8 100644
--- a/src/TNL/Meshes/GridDetails/GridEntity_impl.h
+++ b/src/TNL/Meshes/GridDetails/GridEntity_impl.h
@@ -82,8 +82,8 @@ __cuda_callable__
 inline Index
 GridEntity< Meshes::Grid< Dimension, Real, Device, Index >, EntityDimension, Config >::getIndex() const
 {
-   typedef Meshes::Grid< Dimension, Real, Device, Index > GridType;
-   typedef typename GridType::template EntityType< EntityDimension > EntityType;
+   using GridType = Meshes::Grid< Dimension, Real, Device, Index >;
+   using EntityType = typename GridType::template EntityType< EntityDimension >;
    TNL_ASSERT_GE( this->entityIndex, 0, "Entity index is not non-negative." );
    TNL_ASSERT_LT( this->entityIndex, grid.template getEntitiesCount< EntityDimension >(), "Entity index is out of bounds." );
    TNL_ASSERT_EQ( this->entityIndex, grid.getEntityIndex( *this ), "Wrong value of stored index." );
@@ -367,8 +367,8 @@ __cuda_callable__
 inline Index
 GridEntity< Meshes::Grid< Dimension, Real, Device, Index >, 0, Config >::getIndex() const
 {
-   typedef Meshes::Grid< Dimension, Real, Device, Index > GridType;
-   typedef typename GridType::Vertex Vertex;
+   using GridType = Meshes::Grid< Dimension, Real, Device, Index >;
+   using Vertex = typename GridType::Vertex;
    TNL_ASSERT_GE( this->entityIndex, 0, "Entity index is not non-negative." );
    TNL_ASSERT_LT( this->entityIndex, grid.template getEntitiesCount< 0 >(), "Entity index is out of bounds." );
    TNL_ASSERT_EQ( this->entityIndex, grid.getEntityIndex( *this ), "Wrong value of stored index." );
diff --git a/src/TNL/Meshes/GridDetails/GridTraverser.h b/src/TNL/Meshes/GridDetails/GridTraverser.h
index 17f776adab..25f6298797 100644
--- a/src/TNL/Meshes/GridDetails/GridTraverser.h
+++ b/src/TNL/Meshes/GridDetails/GridTraverser.h
@@ -32,12 +32,12 @@ template< typename Real, typename Index >
 class GridTraverser< Meshes::Grid< 1, Real, Devices::Host, Index > >
 {
 public:
-   typedef Meshes::Grid< 1, Real, Devices::Host, Index > GridType;
-   typedef Pointers::SharedPointer< GridType > GridPointer;
-   typedef Real RealType;
-   typedef Devices::Host DeviceType;
-   typedef Index IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
+   using GridType = Meshes::Grid< 1, Real, Devices::Host, Index >;
+   using GridPointer = Pointers::SharedPointer< GridType >;
+   using RealType = Real;
+   using DeviceType = Devices::Host;
+   using IndexType = Index;
+   using CoordinatesType = typename GridType::CoordinatesType;
 
    template< typename GridEntity, typename EntitiesProcessor, typename UserData, bool processOnlyBoundaryEntities >
    static void
@@ -56,12 +56,12 @@ template< typename Real, typename Index >
 class GridTraverser< Meshes::Grid< 1, Real, Devices::Cuda, Index > >
 {
 public:
-   typedef Meshes::Grid< 1, Real, Devices::Cuda, Index > GridType;
-   typedef Pointers::SharedPointer< GridType > GridPointer;
-   typedef Real RealType;
-   typedef Devices::Cuda DeviceType;
-   typedef Index IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
+   using GridType = Meshes::Grid< 1, Real, Devices::Cuda, Index >;
+   using GridPointer = Pointers::SharedPointer< GridType >;
+   using RealType = Real;
+   using DeviceType = Devices::Cuda;
+   using IndexType = Index;
+   using CoordinatesType = typename GridType::CoordinatesType;
 
    template< typename GridEntity, typename EntitiesProcessor, typename UserData, bool processOnlyBoundaryEntities >
    static void
@@ -80,12 +80,12 @@ template< typename Real, typename Index >
 class GridTraverser< Meshes::Grid< 2, Real, Devices::Host, Index > >
 {
 public:
-   typedef Meshes::Grid< 2, Real, Devices::Host, Index > GridType;
-   typedef Pointers::SharedPointer< GridType > GridPointer;
-   typedef Real RealType;
-   typedef Devices::Host DeviceType;
-   typedef Index IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
+   using GridType = Meshes::Grid< 2, Real, Devices::Host, Index >;
+   using GridPointer = Pointers::SharedPointer< GridType >;
+   using RealType = Real;
+   using DeviceType = Devices::Host;
+   using IndexType = Index;
+   using CoordinatesType = typename GridType::CoordinatesType;
 
    template< typename GridEntity,
              typename EntitiesProcessor,
@@ -116,12 +116,12 @@ template< typename Real, typename Index >
 class GridTraverser< Meshes::Grid< 2, Real, Devices::Cuda, Index > >
 {
 public:
-   typedef Meshes::Grid< 2, Real, Devices::Cuda, Index > GridType;
-   typedef Pointers::SharedPointer< GridType > GridPointer;
-   typedef Real RealType;
-   typedef Devices::Cuda DeviceType;
-   typedef Index IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
+   using GridType = Meshes::Grid< 2, Real, Devices::Cuda, Index >;
+   using GridPointer = Pointers::SharedPointer< GridType >;
+   using RealType = Real;
+   using DeviceType = Devices::Cuda;
+   using IndexType = Index;
+   using CoordinatesType = typename GridType::CoordinatesType;
 
    template< typename GridEntity,
              typename EntitiesProcessor,
@@ -152,12 +152,12 @@ template< typename Real, typename Index >
 class GridTraverser< Meshes::Grid< 3, Real, Devices::Host, Index > >
 {
 public:
-   typedef Meshes::Grid< 3, Real, Devices::Host, Index > GridType;
-   typedef Pointers::SharedPointer< GridType > GridPointer;
-   typedef Real RealType;
-   typedef Devices::Host DeviceType;
-   typedef Index IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
+   using GridType = Meshes::Grid< 3, Real, Devices::Host, Index >;
+   using GridPointer = Pointers::SharedPointer< GridType >;
+   using RealType = Real;
+   using DeviceType = Devices::Host;
+   using IndexType = Index;
+   using CoordinatesType = typename GridType::CoordinatesType;
 
    template< typename GridEntity,
              typename EntitiesProcessor,
@@ -189,12 +189,12 @@ template< typename Real, typename Index >
 class GridTraverser< Meshes::Grid< 3, Real, Devices::Cuda, Index > >
 {
 public:
-   typedef Meshes::Grid< 3, Real, Devices::Cuda, Index > GridType;
-   typedef Pointers::SharedPointer< GridType > GridPointer;
-   typedef Real RealType;
-   typedef Devices::Cuda DeviceType;
-   typedef Index IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
+   using GridType = Meshes::Grid< 3, Real, Devices::Cuda, Index >;
+   using GridPointer = Pointers::SharedPointer< GridType >;
+   using RealType = Real;
+   using DeviceType = Devices::Cuda;
+   using IndexType = Index;
+   using CoordinatesType = typename GridType::CoordinatesType;
 
    template< typename GridEntity,
              typename EntitiesProcessor,
diff --git a/src/TNL/Meshes/GridDetails/NeighborGridEntitiesStorage.h b/src/TNL/Meshes/GridDetails/NeighborGridEntitiesStorage.h
index 8bf0841de2..ffd68c3345 100644
--- a/src/TNL/Meshes/GridDetails/NeighborGridEntitiesStorage.h
+++ b/src/TNL/Meshes/GridDetails/NeighborGridEntitiesStorage.h
@@ -21,8 +21,8 @@ template< typename GridEntity,
 class NeighborGridEntityLayer : public NeighborGridEntityLayer< GridEntity, NeighborEntityDimension - 1, GridEntityConfig >
 {
 public:
-   typedef NeighborGridEntityLayer< GridEntity, NeighborEntityDimension - 1, GridEntityConfig > BaseType;
-   typedef NeighborGridEntityGetter< GridEntity, NeighborEntityDimension > NeighborEntityGetterType;
+   using BaseType = NeighborGridEntityLayer< GridEntity, NeighborEntityDimension - 1, GridEntityConfig >;
+   using NeighborEntityGetterType = NeighborGridEntityGetter< GridEntity, NeighborEntityDimension >;
 
    using BaseType::getNeighborEntities;
 
@@ -52,7 +52,7 @@ template< typename GridEntity, typename GridEntityConfig, bool storage >
 class NeighborGridEntityLayer< GridEntity, 0, GridEntityConfig, storage >
 {
 public:
-   typedef NeighborGridEntityGetter< GridEntity, 0 > NeighborEntityGetterType;
+   using NeighborEntityGetterType = NeighborGridEntityGetter< GridEntity, 0 >;
 
    __cuda_callable__
    NeighborGridEntityLayer( const GridEntity& entity ) : neighborEntities( entity ) {}
@@ -79,7 +79,7 @@ template< typename GridEntity, typename GridEntityConfig >
 class NeighborGridEntitiesStorage
 : public NeighborGridEntityLayer< GridEntity, GridEntity::getMeshDimension(), GridEntityConfig >
 {
-   typedef NeighborGridEntityLayer< GridEntity, GridEntity::getMeshDimension(), GridEntityConfig > BaseType;
+   using BaseType = NeighborGridEntityLayer< GridEntity, GridEntity::getMeshDimension(), GridEntityConfig >;
 
 public:
    using BaseType::getNeighborEntities;
diff --git a/src/TNL/Meshes/GridDetails/NeighborGridEntityGetter1D_impl.h b/src/TNL/Meshes/GridDetails/NeighborGridEntityGetter1D_impl.h
index 18de57109a..c9db445e6d 100644
--- a/src/TNL/Meshes/GridDetails/NeighborGridEntityGetter1D_impl.h
+++ b/src/TNL/Meshes/GridDetails/NeighborGridEntityGetter1D_impl.h
@@ -30,13 +30,13 @@ class NeighborGridEntityGetter< GridEntity< Meshes::Grid< 1, Real, Device, Index
 public:
    static constexpr int EntityDimension = 1;
    static constexpr int NeighborEntityDimension = 1;
-   typedef Meshes::Grid< 1, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, EntityDimension, Config > GridEntityType;
-   typedef GridEntity< GridType, NeighborEntityDimension, Config > NeighborGridEntityType;
-   typedef Real RealType;
-   typedef Index IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
-   typedef GridEntityGetter< GridType, NeighborGridEntityType > GridEntityGetterType;
+   using GridType = Meshes::Grid< 1, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, EntityDimension, Config >;
+   using NeighborGridEntityType = GridEntity< GridType, NeighborEntityDimension, Config >;
+   using RealType = Real;
+   using IndexType = Index;
+   using CoordinatesType = typename GridType::CoordinatesType;
+   using GridEntityGetterType = GridEntityGetter< GridType, NeighborGridEntityType >;
 
    __cuda_callable__
    inline NeighborGridEntityGetter( const GridEntityType& entity ) : entity( entity ) {}
@@ -90,13 +90,13 @@ class NeighborGridEntityGetter< GridEntity< Meshes::Grid< 1, Real, Device, Index
 public:
    static constexpr int EntityDimension = 1;
    static constexpr int NeighborEntityDimension = 1;
-   typedef Meshes::Grid< 1, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, EntityDimension, Config > GridEntityType;
-   typedef GridEntity< GridType, NeighborEntityDimension, Config > NeighborGridEntityType;
-   typedef Real RealType;
-   typedef Index IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
-   typedef GridEntityGetter< GridType, NeighborGridEntityType > GridEntityGetterType;
+   using GridType = Meshes::Grid< 1, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, EntityDimension, Config >;
+   using NeighborGridEntityType = GridEntity< GridType, NeighborEntityDimension, Config >;
+   using RealType = Real;
+   using IndexType = Index;
+   using CoordinatesType = typename GridType::CoordinatesType;
+   using GridEntityGetterType = GridEntityGetter< GridType, NeighborGridEntityType >;
 
    static constexpr int stencilSize = Config::getStencilSize();
 
@@ -171,13 +171,13 @@ class NeighborGridEntityGetter< GridEntity< Meshes::Grid< 1, Real, Device, Index
 public:
    static constexpr int EntityDimension = 1;
    static constexpr int NeighborEntityDimension = 0;
-   typedef Meshes::Grid< 1, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, EntityDimension, Config > GridEntityType;
-   typedef GridEntity< GridType, NeighborEntityDimension, Config > NeighborGridEntityType;
-   typedef Real RealType;
-   typedef Index IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
-   typedef GridEntityGetter< GridType, NeighborGridEntityType > GridEntityGetterType;
+   using GridType = Meshes::Grid< 1, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, EntityDimension, Config >;
+   using NeighborGridEntityType = GridEntity< GridType, NeighborEntityDimension, Config >;
+   using RealType = Real;
+   using IndexType = Index;
+   using CoordinatesType = typename GridType::CoordinatesType;
+   using GridEntityGetterType = GridEntityGetter< GridType, NeighborGridEntityType >;
 
    __cuda_callable__
    inline NeighborGridEntityGetter( const GridEntityType& entity ) : entity( entity ) {}
@@ -235,13 +235,13 @@ class NeighborGridEntityGetter< GridEntity< Meshes::Grid< 1, Real, Device, Index
 public:
    static constexpr int EntityDimension = 0;
    static constexpr int NeighborEntityDimension = 1;
-   typedef Meshes::Grid< 1, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, EntityDimension, Config > GridEntityType;
-   typedef GridEntity< GridType, NeighborEntityDimension, Config > NeighborGridEntityType;
-   typedef Real RealType;
-   typedef Index IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
-   typedef GridEntityGetter< GridType, NeighborGridEntityType > GridEntityGetterType;
+   using GridType = Meshes::Grid< 1, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, EntityDimension, Config >;
+   using NeighborGridEntityType = GridEntity< GridType, NeighborEntityDimension, Config >;
+   using RealType = Real;
+   using IndexType = Index;
+   using CoordinatesType = typename GridType::CoordinatesType;
+   using GridEntityGetterType = GridEntityGetter< GridType, NeighborGridEntityType >;
 
    __cuda_callable__
    inline NeighborGridEntityGetter( const GridEntityType& entity ) : entity( entity ) {}
@@ -303,13 +303,13 @@ class NeighborGridEntityGetter< GridEntity< Meshes::Grid< 1, Real, Device, Index
 public:
    static constexpr int EntityDimension = 0;
    static constexpr int NeighborEntityDimension = 1;
-   typedef Meshes::Grid< 1, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, EntityDimension, Config > GridEntityType;
-   typedef GridEntity< GridType, NeighborEntityDimension, Config > NeighborGridEntityType;
-   typedef Real RealType;
-   typedef Index IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
-   typedef GridEntityGetter< GridType, NeighborGridEntityType > GridEntityGetterType;
+   using GridType = Meshes::Grid< 1, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, EntityDimension, Config >;
+   using NeighborGridEntityType = GridEntity< GridType, NeighborEntityDimension, Config >;
+   using RealType = Real;
+   using IndexType = Index;
+   using CoordinatesType = typename GridType::CoordinatesType;
+   using GridEntityGetterType = GridEntityGetter< GridType, NeighborGridEntityType >;
 
    __cuda_callable__
    inline NeighborGridEntityGetter( const GridEntityType& entity ) : entity( entity ) {}
@@ -365,13 +365,13 @@ class NeighborGridEntityGetter< GridEntity< Meshes::Grid< 1, Real, Device, Index
 public:
    static constexpr int EntityDimension = 0;
    static constexpr int NeighborEntityDimension = 0;
-   typedef Meshes::Grid< 1, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, EntityDimension, Config > GridEntityType;
-   typedef GridEntity< GridType, NeighborEntityDimension, Config > NeighborGridEntityType;
-   typedef Real RealType;
-   typedef Index IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
-   typedef GridEntityGetter< GridType, NeighborGridEntityType > GridEntityGetterType;
+   using GridType = Meshes::Grid< 1, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, EntityDimension, Config >;
+   using NeighborGridEntityType = GridEntity< GridType, NeighborEntityDimension, Config >;
+   using RealType = Real;
+   using IndexType = Index;
+   using CoordinatesType = typename GridType::CoordinatesType;
+   using GridEntityGetterType = GridEntityGetter< GridType, NeighborGridEntityType >;
 
    __cuda_callable__
    inline NeighborGridEntityGetter( const GridEntityType& entity ) : entity( entity ) {}
diff --git a/src/TNL/Meshes/GridDetails/NeighborGridEntityGetter2D_impl.h b/src/TNL/Meshes/GridDetails/NeighborGridEntityGetter2D_impl.h
index bd612c4eb9..dde6019d9f 100644
--- a/src/TNL/Meshes/GridDetails/NeighborGridEntityGetter2D_impl.h
+++ b/src/TNL/Meshes/GridDetails/NeighborGridEntityGetter2D_impl.h
@@ -28,13 +28,13 @@ class NeighborGridEntityGetter< GridEntity< Meshes::Grid< 2, Real, Device, Index
 public:
    static constexpr int EntityDimension = 2;
    static constexpr int NeighborEntityDimension = 2;
-   typedef Meshes::Grid< 2, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, EntityDimension, Config > GridEntityType;
-   typedef GridEntity< GridType, NeighborEntityDimension, Config > NeighborGridEntityType;
-   typedef Real RealType;
-   typedef Index IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
-   typedef GridEntityGetter< GridType, NeighborGridEntityType > GridEntityGetterType;
+   using GridType = Meshes::Grid< 2, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, EntityDimension, Config >;
+   using NeighborGridEntityType = GridEntity< GridType, NeighborEntityDimension, Config >;
+   using RealType = Real;
+   using IndexType = Index;
+   using CoordinatesType = typename GridType::CoordinatesType;
+   using GridEntityGetterType = GridEntityGetter< GridType, NeighborGridEntityType >;
 
    __cuda_callable__
    inline NeighborGridEntityGetter( const GridEntityType& entity ) : entity( entity ) {}
@@ -97,14 +97,14 @@ class NeighborGridEntityGetter< GridEntity< Meshes::Grid< 2, Real, Device, Index
 public:
    static constexpr int EntityDimension = 2;
    static constexpr int NeighborEntityDimension = 2;
-   typedef Meshes::Grid< 2, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, EntityDimension, Config > GridEntityType;
-   typedef GridEntity< GridType, NeighborEntityDimension, Config > NeighborGridEntityType;
-   typedef Real RealType;
-   typedef Index IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
-   typedef GridEntityGetter< GridType, NeighborGridEntityType > GridEntityGetterType;
-   typedef GridEntityStencilStorageTag< GridEntityCrossStencil > StencilStorage;
+   using GridType = Meshes::Grid< 2, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, EntityDimension, Config >;
+   using NeighborGridEntityType = GridEntity< GridType, NeighborEntityDimension, Config >;
+   using RealType = Real;
+   using IndexType = Index;
+   using CoordinatesType = typename GridType::CoordinatesType;
+   using GridEntityGetterType = GridEntityGetter< GridType, NeighborGridEntityType >;
+   using StencilStorage = GridEntityStencilStorageTag< GridEntityCrossStencil >;
 
    static constexpr int stencilSize = Config::getStencilSize();
 
@@ -194,15 +194,15 @@ class NeighborGridEntityGetter< GridEntity< Meshes::Grid< 2, Real, Device, Index
 public:
    static constexpr int EntityDimension = 2;
    static constexpr int NeighborEntityDimension = 1;
-   typedef Meshes::Grid< 2, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, EntityDimension, Config > GridEntityType;
-   typedef GridEntity< GridType, NeighborEntityDimension, Config > NeighborGridEntityType;
-   typedef Real RealType;
-   typedef Index IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
-   typedef GridEntityGetter< GridType, NeighborGridEntityType > GridEntityGetterType;
-   typedef typename GridEntityType::EntityOrientationType EntityOrientationType;
-   typedef typename GridEntityType::EntityBasisType EntityBasisType;
+   using GridType = Meshes::Grid< 2, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, EntityDimension, Config >;
+   using NeighborGridEntityType = GridEntity< GridType, NeighborEntityDimension, Config >;
+   using RealType = Real;
+   using IndexType = Index;
+   using CoordinatesType = typename GridType::CoordinatesType;
+   using GridEntityGetterType = GridEntityGetter< GridType, NeighborGridEntityType >;
+   using EntityOrientationType = typename GridEntityType::EntityOrientationType;
+   using EntityBasisType = typename GridEntityType::EntityBasisType;
 
    __cuda_callable__
    inline NeighborGridEntityGetter( const GridEntityType& entity ) : entity( entity ) {}
@@ -260,13 +260,13 @@ class NeighborGridEntityGetter< GridEntity< Meshes::Grid< 2, Real, Device, Index
 public:
    static constexpr int EntityDimension = 2;
    static constexpr int NeighborEntityDimension = 0;
-   typedef Meshes::Grid< 2, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, EntityDimension, Config > GridEntityType;
-   typedef GridEntity< GridType, NeighborEntityDimension, Config > NeighborGridEntityType;
-   typedef Real RealType;
-   typedef Index IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
-   typedef GridEntityGetter< GridType, NeighborGridEntityType > GridEntityGetterType;
+   using GridType = Meshes::Grid< 2, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, EntityDimension, Config >;
+   using NeighborGridEntityType = GridEntity< GridType, NeighborEntityDimension, Config >;
+   using RealType = Real;
+   using IndexType = Index;
+   using CoordinatesType = typename GridType::CoordinatesType;
+   using GridEntityGetterType = GridEntityGetter< GridType, NeighborGridEntityType >;
 
    __cuda_callable__
    inline NeighborGridEntityGetter( const GridEntityType& entity ) : entity( entity ) {}
@@ -324,13 +324,13 @@ class NeighborGridEntityGetter< GridEntity< Meshes::Grid< 2, Real, Device, Index
 public:
    static constexpr int EntityDimension = 1;
    static constexpr int NeighborEntityDimension = 2;
-   typedef Meshes::Grid< 2, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, EntityDimension, Config > GridEntityType;
-   typedef GridEntity< GridType, NeighborEntityDimension, Config > NeighborGridEntityType;
-   typedef Real RealType;
-   typedef Index IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
-   typedef GridEntityGetter< GridType, NeighborGridEntityType > GridEntityGetterType;
+   using GridType = Meshes::Grid< 2, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, EntityDimension, Config >;
+   using NeighborGridEntityType = GridEntity< GridType, NeighborEntityDimension, Config >;
+   using RealType = Real;
+   using IndexType = Index;
+   using CoordinatesType = typename GridType::CoordinatesType;
+   using GridEntityGetterType = GridEntityGetter< GridType, NeighborGridEntityType >;
 
    __cuda_callable__
    inline NeighborGridEntityGetter( const GridEntityType& entity ) : entity( entity ) {}
@@ -397,13 +397,13 @@ class NeighborGridEntityGetter< GridEntity< Meshes::Grid< 2, Real, Device, Index
 public:
    static constexpr int EntityDimension = 0;
    static constexpr int NeighborEntityDimension = 0;
-   typedef Meshes::Grid< 2, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, EntityDimension, Config > GridEntityType;
-   typedef GridEntity< GridType, NeighborEntityDimension, Config > NeighborGridEntityType;
-   typedef Real RealType;
-   typedef Index IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
-   typedef GridEntityGetter< GridType, NeighborGridEntityType > GridEntityGetterType;
+   using GridType = Meshes::Grid< 2, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, EntityDimension, Config >;
+   using NeighborGridEntityType = GridEntity< GridType, NeighborEntityDimension, Config >;
+   using RealType = Real;
+   using IndexType = Index;
+   using CoordinatesType = typename GridType::CoordinatesType;
+   using GridEntityGetterType = GridEntityGetter< GridType, NeighborGridEntityType >;
 
    __cuda_callable__
    inline NeighborGridEntityGetter( const GridEntityType& entity ) : entity( entity ) {}
diff --git a/src/TNL/Meshes/GridDetails/NeighborGridEntityGetter3D_impl.h b/src/TNL/Meshes/GridDetails/NeighborGridEntityGetter3D_impl.h
index 5d50bb5e6d..405184a320 100644
--- a/src/TNL/Meshes/GridDetails/NeighborGridEntityGetter3D_impl.h
+++ b/src/TNL/Meshes/GridDetails/NeighborGridEntityGetter3D_impl.h
@@ -30,13 +30,13 @@ class NeighborGridEntityGetter< GridEntity< Meshes::Grid< 3, Real, Device, Index
 public:
    static constexpr int EntityDimension = 3;
    static constexpr int NeighborEntityDimension = 3;
-   typedef Meshes::Grid< 3, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, EntityDimension, Config > GridEntityType;
-   typedef GridEntity< GridType, NeighborEntityDimension, Config > NeighborGridEntityType;
-   typedef Real RealType;
-   typedef Index IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
-   typedef GridEntityGetter< GridType, NeighborGridEntityType > GridEntityGetterType;
+   using GridType = Meshes::Grid< 3, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, EntityDimension, Config >;
+   using NeighborGridEntityType = GridEntity< GridType, NeighborEntityDimension, Config >;
+   using RealType = Real;
+   using IndexType = Index;
+   using CoordinatesType = typename GridType::CoordinatesType;
+   using GridEntityGetterType = GridEntityGetter< GridType, NeighborGridEntityType >;
 
    __cuda_callable__
    inline NeighborGridEntityGetter( const GridEntityType& entity ) : entity( entity ) {}
@@ -102,14 +102,14 @@ class NeighborGridEntityGetter< GridEntity< Meshes::Grid< 3, Real, Device, Index
 public:
    static constexpr int EntityDimension = 3;
    static constexpr int NeighborEntityDimension = 3;
-   typedef Meshes::Grid< 3, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, EntityDimension, Config > GridEntityType;
-   typedef GridEntity< GridType, NeighborEntityDimension, Config > NeighborGridEntityType;
-   typedef Real RealType;
-   typedef Index IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
-   typedef GridEntityGetter< GridType, NeighborGridEntityType > GridEntityGetterType;
-   typedef GridEntityStencilStorageTag< GridEntityCrossStencil > StencilStorage;
+   using GridType = Meshes::Grid< 3, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, EntityDimension, Config >;
+   using NeighborGridEntityType = GridEntity< GridType, NeighborEntityDimension, Config >;
+   using RealType = Real;
+   using IndexType = Index;
+   using CoordinatesType = typename GridType::CoordinatesType;
+   using GridEntityGetterType = GridEntityGetter< GridType, NeighborGridEntityType >;
+   using StencilStorage = GridEntityStencilStorageTag< GridEntityCrossStencil >;
 
    static constexpr int stencilSize = Config::getStencilSize();
 
@@ -215,15 +215,15 @@ class NeighborGridEntityGetter< GridEntity< Meshes::Grid< 3, Real, Device, Index
 public:
    static constexpr int EntityDimension = 3;
    static constexpr int NeighborEntityDimension = 2;
-   typedef Meshes::Grid< 3, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, EntityDimension, Config > GridEntityType;
-   typedef GridEntity< GridType, NeighborEntityDimension, Config > NeighborGridEntityType;
-   typedef Real RealType;
-   typedef Index IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
-   typedef GridEntityGetter< GridType, NeighborGridEntityType > GridEntityGetterType;
-   typedef typename GridEntityType::EntityOrientationType EntityOrientationType;
-   typedef typename GridEntityType::EntityBasisType EntityBasisType;
+   using GridType = Meshes::Grid< 3, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, EntityDimension, Config >;
+   using NeighborGridEntityType = GridEntity< GridType, NeighborEntityDimension, Config >;
+   using RealType = Real;
+   using IndexType = Index;
+   using CoordinatesType = typename GridType::CoordinatesType;
+   using GridEntityGetterType = GridEntityGetter< GridType, NeighborGridEntityType >;
+   using EntityOrientationType = typename GridEntityType::EntityOrientationType;
+   using EntityBasisType = typename GridEntityType::EntityBasisType;
 
    __cuda_callable__
    inline NeighborGridEntityGetter( const GridEntityType& entity ) : entity( entity ) {}
@@ -290,15 +290,15 @@ class NeighborGridEntityGetter< GridEntity< Meshes::Grid< 3, Real, Device, Index
 public:
    static constexpr int EntityDimension = 3;
    static constexpr int NeighborEntityDimension = 2;
-   typedef Meshes::Grid< 3, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, EntityDimension, Config > GridEntityType;
-   typedef GridEntity< GridType, NeighborEntityDimension, Config > NeighborGridEntityType;
-   typedef Real RealType;
-   typedef Index IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
-   typedef GridEntityGetter< GridType, NeighborGridEntityType > GridEntityGetterType;
-   typedef typename GridEntityType::EntityOrientationType EntityOrientationType;
-   typedef typename GridEntityType::EntityBasisType EntityBasisType;
+   using GridType = Meshes::Grid< 3, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, EntityDimension, Config >;
+   using NeighborGridEntityType = GridEntity< GridType, NeighborEntityDimension, Config >;
+   using RealType = Real;
+   using IndexType = Index;
+   using CoordinatesType = typename GridType::CoordinatesType;
+   using GridEntityGetterType = GridEntityGetter< GridType, NeighborGridEntityType >;
+   using EntityOrientationType = typename GridEntityType::EntityOrientationType;
+   using EntityBasisType = typename GridEntityType::EntityBasisType;
 
    __cuda_callable__
    inline NeighborGridEntityGetter( const GridEntityType& entity ) : entity( entity ) {}
@@ -365,15 +365,15 @@ class NeighborGridEntityGetter< GridEntity< Meshes::Grid< 3, Real, Device, Index
 public:
    static constexpr int EntityDimension = 3;
    static constexpr int NeighborEntityDimension = 1;
-   typedef Meshes::Grid< 3, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, EntityDimension, Config > GridEntityType;
-   typedef GridEntity< GridType, NeighborEntityDimension, Config > NeighborGridEntityType;
-   typedef Real RealType;
-   typedef Index IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
-   typedef GridEntityGetter< GridType, NeighborGridEntityType > GridEntityGetterType;
-   typedef typename GridEntityType::EntityOrientationType EntityOrientationType;
-   typedef typename GridEntityType::EntityBasisType EntityBasisType;
+   using GridType = Meshes::Grid< 3, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, EntityDimension, Config >;
+   using NeighborGridEntityType = GridEntity< GridType, NeighborEntityDimension, Config >;
+   using RealType = Real;
+   using IndexType = Index;
+   using CoordinatesType = typename GridType::CoordinatesType;
+   using GridEntityGetterType = GridEntityGetter< GridType, NeighborGridEntityType >;
+   using EntityOrientationType = typename GridEntityType::EntityOrientationType;
+   using EntityBasisType = typename GridEntityType::EntityBasisType;
 
    __cuda_callable__
    inline NeighborGridEntityGetter( const GridEntityType& entity ) : entity( entity ) {}
@@ -438,13 +438,13 @@ class NeighborGridEntityGetter< GridEntity< Meshes::Grid< 3, Real, Device, Index
 public:
    static constexpr int EntityDimension = 3;
    static constexpr int NeighborEntityDimension = 0;
-   typedef Meshes::Grid< 3, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, EntityDimension, Config > GridEntityType;
-   typedef GridEntity< GridType, NeighborEntityDimension, Config > NeighborGridEntityType;
-   typedef Real RealType;
-   typedef Index IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
-   typedef GridEntityGetter< GridType, NeighborGridEntityType > GridEntityGetterType;
+   using GridType = Meshes::Grid< 3, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, EntityDimension, Config >;
+   using NeighborGridEntityType = GridEntity< GridType, NeighborEntityDimension, Config >;
+   using RealType = Real;
+   using IndexType = Index;
+   using CoordinatesType = typename GridType::CoordinatesType;
+   using GridEntityGetterType = GridEntityGetter< GridType, NeighborGridEntityType >;
 
    __cuda_callable__
    inline NeighborGridEntityGetter( const GridEntityType& entity ) : entity( entity ) {}
@@ -509,13 +509,13 @@ class NeighborGridEntityGetter< GridEntity< Meshes::Grid< 3, Real, Device, Index
 public:
    static constexpr int EntityDimension = 2;
    static constexpr int NeighborEntityDimension = 3;
-   typedef Meshes::Grid< 3, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, EntityDimension, Config > GridEntityType;
-   typedef GridEntity< GridType, NeighborEntityDimension, Config > NeighborGridEntityType;
-   typedef Real RealType;
-   typedef Index IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
-   typedef GridEntityGetter< GridType, NeighborGridEntityType > GridEntityGetterType;
+   using GridType = Meshes::Grid< 3, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, EntityDimension, Config >;
+   using NeighborGridEntityType = GridEntity< GridType, NeighborEntityDimension, Config >;
+   using RealType = Real;
+   using IndexType = Index;
+   using CoordinatesType = typename GridType::CoordinatesType;
+   using GridEntityGetterType = GridEntityGetter< GridType, NeighborGridEntityType >;
 
    __cuda_callable__
    inline NeighborGridEntityGetter( const GridEntityType& entity ) : entity( entity ) {}
@@ -593,13 +593,13 @@ class NeighborGridEntityGetter< GridEntity< Meshes::Grid< 3, Real, Device, Index
 public:
    static constexpr int EntityDimension = 0;
    static constexpr int NeighborEntityDimension = 0;
-   typedef Meshes::Grid< 3, Real, Device, Index > GridType;
-   typedef GridEntity< GridType, EntityDimension, Config > GridEntityType;
-   typedef GridEntity< GridType, NeighborEntityDimension, Config > NeighborGridEntityType;
-   typedef Real RealType;
-   typedef Index IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
-   typedef GridEntityGetter< GridType, NeighborGridEntityType > GridEntityGetterType;
+   using GridType = Meshes::Grid< 3, Real, Device, Index >;
+   using GridEntityType = GridEntity< GridType, EntityDimension, Config >;
+   using NeighborGridEntityType = GridEntity< GridType, NeighborEntityDimension, Config >;
+   using RealType = Real;
+   using IndexType = Index;
+   using CoordinatesType = typename GridType::CoordinatesType;
+   using GridEntityGetterType = GridEntityGetter< GridType, NeighborGridEntityType >;
 
    __cuda_callable__
    inline NeighborGridEntityGetter( const GridEntityType& entity ) : entity( entity ) {}
diff --git a/src/TNL/Meshes/GridEntity.h b/src/TNL/Meshes/GridEntity.h
index 3ec5323fc8..a7c863db54 100644
--- a/src/TNL/Meshes/GridEntity.h
+++ b/src/TNL/Meshes/GridEntity.h
@@ -29,12 +29,12 @@ template< int Dimension, typename Real, typename Device, typename Index, int Ent
 class GridEntity< Meshes::Grid< Dimension, Real, Device, Index >, EntityDimension, Config >
 {
 public:
-   typedef Meshes::Grid< Dimension, Real, Device, Index > GridType;
-   typedef GridType MeshType;
-   typedef typename GridType::RealType RealType;
-   typedef typename GridType::IndexType IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
-   typedef Config ConfigType;
+   using GridType = Meshes::Grid< Dimension, Real, Device, Index >;
+   using MeshType = GridType;
+   using RealType = typename GridType::RealType;
+   using IndexType = typename GridType::IndexType;
+   using CoordinatesType = typename GridType::CoordinatesType;
+   using ConfigType = Config;
 
    constexpr static int
    getMeshDimension()
@@ -48,11 +48,11 @@ public:
       return EntityDimension;
    };
 
-   typedef Containers::StaticVector< getMeshDimension(), IndexType > EntityOrientationType;
-   typedef Containers::StaticVector< getMeshDimension(), IndexType > EntityBasisType;
-   typedef typename GridType::PointType PointType;
+   using EntityOrientationType = Containers::StaticVector< getMeshDimension(), IndexType >;
+   using EntityBasisType = Containers::StaticVector< getMeshDimension(), IndexType >;
+   using PointType = typename GridType::PointType;
 
-   typedef NeighborGridEntitiesStorage< GridEntity, Config > NeighborGridEntitiesStorageType;
+   using NeighborGridEntitiesStorageType = NeighborGridEntitiesStorage< GridEntity, Config >;
 
    template< int NeighborEntityDimension = getEntityDimension() >
    using NeighborEntities =
@@ -160,13 +160,13 @@ template< int Dimension, typename Real, typename Device, typename Index, typenam
 class GridEntity< Meshes::Grid< Dimension, Real, Device, Index >, Dimension, Config >
 {
 public:
-   typedef Meshes::Grid< Dimension, Real, Device, Index > GridType;
-   typedef GridType MeshType;
-   typedef typename GridType::RealType RealType;
-   typedef typename GridType::IndexType IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
-   typedef typename GridType::PointType PointType;
-   typedef Config ConfigType;
+   using GridType = Meshes::Grid< Dimension, Real, Device, Index >;
+   using MeshType = GridType;
+   using RealType = typename GridType::RealType;
+   using IndexType = typename GridType::IndexType;
+   using CoordinatesType = typename GridType::CoordinatesType;
+   using PointType = typename GridType::PointType;
+   using ConfigType = Config;
 
    constexpr static int
    getMeshDimension()
@@ -180,9 +180,9 @@ public:
       return getMeshDimension();
    };
 
-   typedef Containers::StaticVector< getMeshDimension(), IndexType > EntityOrientationType;
-   typedef Containers::StaticVector< getMeshDimension(), IndexType > EntityBasisType;
-   typedef NeighborGridEntitiesStorage< GridEntity, Config > NeighborGridEntitiesStorageType;
+   using EntityOrientationType = Containers::StaticVector< getMeshDimension(), IndexType >;
+   using EntityBasisType = Containers::StaticVector< getMeshDimension(), IndexType >;
+   using NeighborGridEntitiesStorageType = NeighborGridEntitiesStorage< GridEntity, Config >;
 
    template< int NeighborEntityDimension = getEntityDimension() >
    using NeighborEntities =
@@ -290,13 +290,13 @@ template< int Dimension, typename Real, typename Device, typename Index, typenam
 class GridEntity< Meshes::Grid< Dimension, Real, Device, Index >, 0, Config >
 {
 public:
-   typedef Meshes::Grid< Dimension, Real, Device, Index > GridType;
-   typedef GridType MeshType;
-   typedef typename GridType::RealType RealType;
-   typedef typename GridType::IndexType IndexType;
-   typedef typename GridType::CoordinatesType CoordinatesType;
-   typedef typename GridType::PointType PointType;
-   typedef Config ConfigType;
+   using GridType = Meshes::Grid< Dimension, Real, Device, Index >;
+   using MeshType = GridType;
+   using RealType = typename GridType::RealType;
+   using IndexType = typename GridType::IndexType;
+   using CoordinatesType = typename GridType::CoordinatesType;
+   using PointType = typename GridType::PointType;
+   using ConfigType = Config;
 
    constexpr static int
    getMeshDimension()
@@ -310,9 +310,9 @@ public:
       return 0;
    };
 
-   typedef Containers::StaticVector< getMeshDimension(), IndexType > EntityOrientationType;
-   typedef Containers::StaticVector< getMeshDimension(), IndexType > EntityBasisType;
-   typedef NeighborGridEntitiesStorage< GridEntity, Config > NeighborGridEntitiesStorageType;
+   using EntityOrientationType = Containers::StaticVector< getMeshDimension(), IndexType >;
+   using EntityBasisType = Containers::StaticVector< getMeshDimension(), IndexType >;
+   using NeighborGridEntitiesStorageType = NeighborGridEntitiesStorage< GridEntity, Config >;
 
    template< int NeighborEntityDimension = getEntityDimension() >
    using NeighborEntities = NeighborGridEntityGetter< GridEntity< Meshes::Grid< Dimension, Real, Device, Index >, 0, Config >,
diff --git a/src/TNL/Meshes/Topologies/Edge.h b/src/TNL/Meshes/Topologies/Edge.h
index 0fcc645019..ac3a890aa5 100644
--- a/src/TNL/Meshes/Topologies/Edge.h
+++ b/src/TNL/Meshes/Topologies/Edge.h
@@ -27,7 +27,7 @@ struct Edge
 template<>
 struct Subtopology< Edge, 0 >
 {
-   typedef Vertex Topology;
+   using Topology = Vertex;
 
    static constexpr int count = 2;
 };
diff --git a/src/TNL/Meshes/Topologies/Hexahedron.h b/src/TNL/Meshes/Topologies/Hexahedron.h
index f673bc2471..0987abbf20 100644
--- a/src/TNL/Meshes/Topologies/Hexahedron.h
+++ b/src/TNL/Meshes/Topologies/Hexahedron.h
@@ -26,7 +26,7 @@ struct Hexahedron
 template<>
 struct Subtopology< Hexahedron, 0 >
 {
-   typedef Vertex Topology;
+   using Topology = Vertex;
 
    static constexpr int count = 8;
 };
@@ -34,7 +34,7 @@ struct Subtopology< Hexahedron, 0 >
 template<>
 struct Subtopology< Hexahedron, 1 >
 {
-   typedef Edge Topology;
+   using Topology = Edge;
 
    static constexpr int count = 12;
 };
@@ -42,7 +42,7 @@ struct Subtopology< Hexahedron, 1 >
 template<>
 struct Subtopology< Hexahedron, 2 >
 {
-   typedef Quadrangle Topology;
+   using Topology = Quadrangle;
 
    static constexpr int count = 6;
 };
diff --git a/src/TNL/Meshes/Topologies/Quadrangle.h b/src/TNL/Meshes/Topologies/Quadrangle.h
index 3da30ddba6..6a5f0222cf 100644
--- a/src/TNL/Meshes/Topologies/Quadrangle.h
+++ b/src/TNL/Meshes/Topologies/Quadrangle.h
@@ -26,7 +26,7 @@ struct Quadrangle
 template<>
 struct Subtopology< Quadrangle, 0 >
 {
-   typedef Vertex Topology;
+   using Topology = Vertex;
 
    static constexpr int count = 4;
 };
@@ -34,7 +34,7 @@ struct Subtopology< Quadrangle, 0 >
 template<>
 struct Subtopology< Quadrangle, 1 >
 {
-   typedef Edge Topology;
+   using Topology = Edge;
 
    static constexpr int count = 4;
 };
diff --git a/src/TNL/Meshes/Topologies/Simplex.h b/src/TNL/Meshes/Topologies/Simplex.h
index e42db61244..4aee3a9f31 100644
--- a/src/TNL/Meshes/Topologies/Simplex.h
+++ b/src/TNL/Meshes/Topologies/Simplex.h
@@ -42,7 +42,7 @@ class Subtopology< Simplex< dimension >, subtopologyDim >
    static constexpr int subtopologyVertexCount = Subtopology< Simplex< subtopologyDim >, 0 >::count;
 
 public:
-   typedef Simplex< subtopologyDim > Topology;
+   using Topology = Simplex< subtopologyDim >;
 
    static constexpr int count = SimplexDetails::NumCombinations< topologyVertexCount, subtopologyVertexCount >::value;
 };
@@ -53,7 +53,7 @@ class Subtopology< Simplex< dimension >, 0 >
    static_assert( 0 < dimension, "invalid dimension" );
 
 public:
-   typedef Vertex Topology;
+   using Topology = Vertex;
 
    static constexpr int count = dimension + 1;
 };
diff --git a/src/TNL/Meshes/Topologies/Tetrahedron.h b/src/TNL/Meshes/Topologies/Tetrahedron.h
index b36e4f8720..1bb8ed7122 100644
--- a/src/TNL/Meshes/Topologies/Tetrahedron.h
+++ b/src/TNL/Meshes/Topologies/Tetrahedron.h
@@ -26,7 +26,7 @@ struct Tetrahedron
 template<>
 struct Subtopology< Tetrahedron, 0 >
 {
-   typedef Vertex Topology;
+   using Topology = Vertex;
 
    static constexpr int count = 4;
 };
@@ -34,7 +34,7 @@ struct Subtopology< Tetrahedron, 0 >
 template<>
 struct Subtopology< Tetrahedron, 1 >
 {
-   typedef Edge Topology;
+   using Topology = Edge;
 
    static constexpr int count = 6;
 };
@@ -42,7 +42,7 @@ struct Subtopology< Tetrahedron, 1 >
 template<>
 struct Subtopology< Tetrahedron, 2 >
 {
-   typedef Triangle Topology;
+   using Topology = Triangle;
 
    static constexpr int count = 4;
 };
diff --git a/src/TNL/Meshes/Topologies/Triangle.h b/src/TNL/Meshes/Topologies/Triangle.h
index 1a481dfcea..3948d98137 100644
--- a/src/TNL/Meshes/Topologies/Triangle.h
+++ b/src/TNL/Meshes/Topologies/Triangle.h
@@ -26,7 +26,7 @@ struct Triangle
 template<>
 struct Subtopology< Triangle, 0 >
 {
-   typedef Vertex Topology;
+   using Topology = Vertex;
 
    static constexpr int count = 3;
 };
@@ -34,7 +34,7 @@ struct Subtopology< Triangle, 0 >
 template<>
 struct Subtopology< Triangle, 1 >
 {
-   typedef Edge Topology;
+   using Topology = Edge;
 
    static constexpr int count = 3;
 };
diff --git a/src/TNL/Operators/Analytic/Heaviside.h b/src/TNL/Operators/Analytic/Heaviside.h
index 59ef558644..25f94d300e 100644
--- a/src/TNL/Operators/Analytic/Heaviside.h
+++ b/src/TNL/Operators/Analytic/Heaviside.h
@@ -19,8 +19,8 @@ template< int Dimensions, typename Real = double >
 class Heaviside : public Functions::Domain< Dimensions, Functions::SpaceDomain >
 {
 public:
-   typedef Real RealType;
-   typedef Containers::StaticVector< Dimensions, RealType > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< Dimensions, RealType >;
 
    Heaviside() : multiplicator( 1.0 ) {}
 
diff --git a/src/TNL/Operators/Analytic/Identity.h b/src/TNL/Operators/Analytic/Identity.h
index f8d1da5e52..f3e188c209 100644
--- a/src/TNL/Operators/Analytic/Identity.h
+++ b/src/TNL/Operators/Analytic/Identity.h
@@ -18,8 +18,8 @@ template< int Dimensions, typename Real >
 class Identity : public Functions::Domain< Dimensions, Functions::SpaceDomain >
 {
 public:
-   typedef Real RealType;
-   typedef Containers::StaticVector< Dimensions, RealType > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< Dimensions, RealType >;
 
    bool
    setup( const Config::ParameterContainer& parameters, const String& prefix = "" )
diff --git a/src/TNL/Operators/Analytic/SmoothHeaviside.h b/src/TNL/Operators/Analytic/SmoothHeaviside.h
index d228319dad..a12185386f 100644
--- a/src/TNL/Operators/Analytic/SmoothHeaviside.h
+++ b/src/TNL/Operators/Analytic/SmoothHeaviside.h
@@ -18,8 +18,8 @@ template< int Dimensions, typename Real = double >
 class SmoothHeaviside : public Functions::Domain< Dimensions, Functions::SpaceDomain >
 {
 public:
-   typedef Real RealType;
-   typedef Containers::StaticVector< Dimensions, RealType > PointType;
+   using RealType = Real;
+   using PointType = Containers::StaticVector< Dimensions, RealType >;
 
    SmoothHeaviside() : sharpness( 1.0 ) {}
 
diff --git a/src/TNL/Operators/DirichletBoundaryConditions.h b/src/TNL/Operators/DirichletBoundaryConditions.h
index f465883758..3d72741da0 100644
--- a/src/TNL/Operators/DirichletBoundaryConditions.h
+++ b/src/TNL/Operators/DirichletBoundaryConditions.h
@@ -23,15 +23,15 @@ class DirichletBoundaryConditions
 : public Operator< Mesh, Functions::MeshBoundaryDomain, MeshEntitiesDimension, MeshEntitiesDimension, Real, Index >
 {
 public:
-   typedef Mesh MeshType;
-   typedef Function FunctionType;
-   typedef Real RealType;
-   typedef typename MeshType::DeviceType DeviceType;
-   typedef Index IndexType;
-
-   typedef Pointers::SharedPointer< Mesh > MeshPointer;
-   typedef Containers::Vector< RealType, DeviceType, IndexType > DofVectorType;
-   typedef typename MeshType::PointType PointType;
+   using MeshType = Mesh;
+   using FunctionType = Function;
+   using RealType = Real;
+   using DeviceType = typename MeshType::DeviceType;
+   using IndexType = Index;
+
+   using MeshPointer = Pointers::SharedPointer< Mesh >;
+   using DofVectorType = Containers::Vector< RealType, DeviceType, IndexType >;
+   using PointType = typename MeshType::PointType;
 
    static constexpr int
    getMeshDimension()
diff --git a/src/TNL/Operators/FiniteDifferences.h b/src/TNL/Operators/FiniteDifferences.h
index 6ba75f4751..2b54ca010a 100644
--- a/src/TNL/Operators/FiniteDifferences.h
+++ b/src/TNL/Operators/FiniteDifferences.h
@@ -19,12 +19,12 @@ template< typename Real, typename Device, typename Index >
 class FiniteDifferences< Meshes::Grid< 1, Real, Device, Index > >
 {
 public:
-   typedef Real RealType;
-   typedef Device DeviceType;
-   typedef Index IndexType;
-   typedef Meshes::Grid< 1, Real, Device, Index > GridType;
+   using RealType = Real;
+   using DeviceType = Device;
+   using IndexType = Index;
+   using GridType = Meshes::Grid< 1, Real, Device, Index >;
    // typedef typename GridType::CoordinatesType CoordinatesType;
-   typedef typename GridType::Cell CellType;
+   using CellType = typename GridType::Cell;
 
    template< typename GridFunction,
              int XDifferenceOrder,
@@ -51,12 +51,12 @@ template< typename Real, typename Device, typename Index >
 class FiniteDifferences< Meshes::Grid< 2, Real, Device, Index > >
 {
 public:
-   typedef Real RealType;
-   typedef Device DeviceType;
-   typedef Index IndexType;
-   typedef Meshes::Grid< 2, Real, Device, Index > GridType;
+   using RealType = Real;
+   using DeviceType = Device;
+   using IndexType = Index;
+   using GridType = Meshes::Grid< 2, Real, Device, Index >;
    // typedef typename GridType::CoordinatesType CoordinatesType;
-   typedef typename GridType::Cell CellType;
+   using CellType = typename GridType::Cell;
 
    template< typename GridFunction,
              int XDifferenceOrder,
@@ -83,12 +83,12 @@ template< typename Real, typename Device, typename Index >
 class FiniteDifferences< Meshes::Grid< 3, Real, Device, Index > >
 {
 public:
-   typedef Real RealType;
-   typedef Device DeviceType;
-   typedef Index IndexType;
-   typedef Meshes::Grid< 3, Real, Device, Index > GridType;
+   using RealType = Real;
+   using DeviceType = Device;
+   using IndexType = Index;
+   using GridType = Meshes::Grid< 3, Real, Device, Index >;
    // typedef typename GridType::CoordinatesType CoordinatesType;
-   typedef typename GridType::Cell CellType;
+   using CellType = typename GridType::Cell;
 
    template< typename GridFunction,
              int XDifferenceOrder,
diff --git a/src/TNL/Operators/NeumannBoundaryConditions.h b/src/TNL/Operators/NeumannBoundaryConditions.h
index 94d5d37470..8f5e11f2e1 100644
--- a/src/TNL/Operators/NeumannBoundaryConditions.h
+++ b/src/TNL/Operators/NeumannBoundaryConditions.h
@@ -25,7 +25,7 @@ template< typename Function >
 class NeumannBoundaryConditionsBase
 {
 public:
-   typedef Function FunctionType;
+   using FunctionType = Function;
 
    static void
    configSetup( const Config::ConfigDescription& config, const String& prefix = "" )
@@ -84,16 +84,16 @@ class NeumannBoundaryConditions< Meshes::Grid< 1, MeshReal, Device, MeshIndex >,
   public Operator< Meshes::Grid< 1, MeshReal, Device, MeshIndex >, Functions::MeshBoundaryDomain, 1, 1, Real, Index >
 {
 public:
-   typedef Meshes::Grid< 1, MeshReal, Device, MeshIndex > MeshType;
-   typedef Real RealType;
-   typedef Device DeviceType;
-   typedef Index IndexType;
+   using MeshType = Meshes::Grid< 1, MeshReal, Device, MeshIndex >;
+   using RealType = Real;
+   using DeviceType = Device;
+   using IndexType = Index;
 
-   typedef Function FunctionType;
-   typedef Containers::Vector< RealType, DeviceType, IndexType > DofVectorType;
-   typedef Containers::StaticVector< 1, RealType > PointType;
-   typedef typename MeshType::CoordinatesType CoordinatesType;
-   typedef NeumannBoundaryConditionsBase< Function > BaseType;
+   using FunctionType = Function;
+   using DofVectorType = Containers::Vector< RealType, DeviceType, IndexType >;
+   using PointType = Containers::StaticVector< 1, RealType >;
+   using CoordinatesType = typename MeshType::CoordinatesType;
+   using BaseType = NeumannBoundaryConditionsBase< Function >;
 
    template< typename EntityType, typename MeshFunction >
    __cuda_callable__
@@ -159,16 +159,16 @@ class NeumannBoundaryConditions< Meshes::Grid< 2, MeshReal, Device, MeshIndex >,
 
 {
 public:
-   typedef Meshes::Grid< 2, MeshReal, Device, MeshIndex > MeshType;
-   typedef Real RealType;
-   typedef Device DeviceType;
-   typedef Index IndexType;
+   using MeshType = Meshes::Grid< 2, MeshReal, Device, MeshIndex >;
+   using RealType = Real;
+   using DeviceType = Device;
+   using IndexType = Index;
 
-   typedef Function FunctionType;
-   typedef Containers::Vector< RealType, DeviceType, IndexType > DofVectorType;
-   typedef Containers::StaticVector< 2, RealType > PointType;
-   typedef typename MeshType::CoordinatesType CoordinatesType;
-   typedef NeumannBoundaryConditionsBase< Function > BaseType;
+   using FunctionType = Function;
+   using DofVectorType = Containers::Vector< RealType, DeviceType, IndexType >;
+   using PointType = Containers::StaticVector< 2, RealType >;
+   using CoordinatesType = typename MeshType::CoordinatesType;
+   using BaseType = NeumannBoundaryConditionsBase< Function >;
 
    template< typename EntityType, typename MeshFunction >
    __cuda_callable__
@@ -259,16 +259,16 @@ class NeumannBoundaryConditions< Meshes::Grid< 3, MeshReal, Device, MeshIndex >,
   public Operator< Meshes::Grid< 3, MeshReal, Device, MeshIndex >, Functions::MeshBoundaryDomain, 3, 3, Real, Index >
 {
 public:
-   typedef Meshes::Grid< 3, MeshReal, Device, MeshIndex > MeshType;
-   typedef Real RealType;
-   typedef Device DeviceType;
-   typedef Index IndexType;
+   using MeshType = Meshes::Grid< 3, MeshReal, Device, MeshIndex >;
+   using RealType = Real;
+   using DeviceType = Device;
+   using IndexType = Index;
 
-   typedef Function FunctionType;
-   typedef Containers::Vector< RealType, DeviceType, IndexType > DofVectorType;
-   typedef Containers::StaticVector< 3, RealType > PointType;
-   typedef typename MeshType::CoordinatesType CoordinatesType;
-   typedef NeumannBoundaryConditionsBase< Function > BaseType;
+   using FunctionType = Function;
+   using DofVectorType = Containers::Vector< RealType, DeviceType, IndexType >;
+   using PointType = Containers::StaticVector< 3, RealType >;
+   using CoordinatesType = typename MeshType::CoordinatesType;
+   using BaseType = NeumannBoundaryConditionsBase< Function >;
 
    template< typename EntityType, typename MeshFunction >
    __cuda_callable__
diff --git a/src/TNL/Operators/Operator.h b/src/TNL/Operators/Operator.h
index 1e9ca5a674..9949eccb40 100644
--- a/src/TNL/Operators/Operator.h
+++ b/src/TNL/Operators/Operator.h
@@ -20,13 +20,13 @@ template< typename Mesh,
 class Operator : public Functions::Domain< Mesh::getMeshDimension(), DomainType >
 {
 public:
-   typedef Mesh MeshType;
-   typedef typename MeshType::RealType MeshRealType;
-   typedef typename MeshType::DeviceType DeviceType;
-   typedef typename MeshType::GlobalIndexType MeshIndexType;
-   typedef Real RealType;
-   typedef Index IndexType;
-   typedef void ExactOperatorType;
+   using MeshType = Mesh;
+   using MeshRealType = typename MeshType::RealType;
+   using DeviceType = typename MeshType::DeviceType;
+   using MeshIndexType = typename MeshType::GlobalIndexType;
+   using RealType = Real;
+   using IndexType = Index;
+   using ExactOperatorType = void;
 
    constexpr static int
    getMeshDimension()
diff --git a/src/TNL/Pointers/SmartPointersRegister.h b/src/TNL/Pointers/SmartPointersRegister.h
index fc941ee28f..3dfe5ff966 100644
--- a/src/TNL/Pointers/SmartPointersRegister.h
+++ b/src/TNL/Pointers/SmartPointersRegister.h
@@ -79,7 +79,7 @@ public:
    }
 
 protected:
-   typedef std::unordered_set< SmartPointer* > SetType;
+   using SetType = std::unordered_set< SmartPointer* >;
 
    std::unordered_map< int, SetType > pointersOnDevices;
 };
diff --git a/src/TNL/Problems/PDEProblem.h b/src/TNL/Problems/PDEProblem.h
index 2f530ae1d0..1b7bfba7f7 100644
--- a/src/TNL/Problems/PDEProblem.h
+++ b/src/TNL/Problems/PDEProblem.h
@@ -50,7 +50,7 @@ public:
    /****
     * This means that the time stepper will be set from the command line arguments.
     */
-   typedef void TimeStepper;
+   using TimeStepper = void;
 
    String
    getPrologHeader() const;
diff --git a/src/TNL/Problems/Problem.h b/src/TNL/Problems/Problem.h
index 46f24cc60a..5696bc97a8 100644
--- a/src/TNL/Problems/Problem.h
+++ b/src/TNL/Problems/Problem.h
@@ -13,9 +13,9 @@ template< typename Real, typename Device, typename Index >
 class Problem
 {
 public:
-   typedef Real RealType;
-   typedef Device DeviceType;
-   typedef Index IndexType;
+   using RealType = Real;
+   using DeviceType = Device;
+   using IndexType = Index;
 };
 
 }  // namespace Problems
diff --git a/src/TNL/Solvers/PDE/ExplicitUpdater.h b/src/TNL/Solvers/PDE/ExplicitUpdater.h
index df6c333eb5..3df67401e3 100644
--- a/src/TNL/Solvers/PDE/ExplicitUpdater.h
+++ b/src/TNL/Solvers/PDE/ExplicitUpdater.h
@@ -64,18 +64,18 @@ template< typename Mesh,
 class ExplicitUpdater
 {
 public:
-   typedef Mesh MeshType;
-   typedef Pointers::SharedPointer< MeshType > MeshPointer;
-   typedef typename MeshFunction::RealType RealType;
-   typedef typename MeshFunction::DeviceType DeviceType;
-   typedef typename MeshFunction::IndexType IndexType;
-   typedef ExplicitUpdaterTraverserUserData< RealType, MeshFunction, DifferentialOperator, BoundaryConditions, RightHandSide >
-      TraverserUserData;
-   typedef Pointers::SharedPointer< DifferentialOperator, DeviceType > DifferentialOperatorPointer;
-   typedef Pointers::SharedPointer< BoundaryConditions, DeviceType > BoundaryConditionsPointer;
-   typedef Pointers::SharedPointer< RightHandSide, DeviceType > RightHandSidePointer;
-   typedef Pointers::SharedPointer< MeshFunction, DeviceType > MeshFunctionPointer;
-   typedef Pointers::SharedPointer< TraverserUserData, DeviceType > TraverserUserDataPointer;
+   using MeshType = Mesh;
+   using MeshPointer = Pointers::SharedPointer< MeshType >;
+   using RealType = typename MeshFunction::RealType;
+   using DeviceType = typename MeshFunction::DeviceType;
+   using IndexType = typename MeshFunction::IndexType;
+   using TraverserUserData =
+      ExplicitUpdaterTraverserUserData< RealType, MeshFunction, DifferentialOperator, BoundaryConditions, RightHandSide >;
+   using DifferentialOperatorPointer = Pointers::SharedPointer< DifferentialOperator, DeviceType >;
+   using BoundaryConditionsPointer = Pointers::SharedPointer< BoundaryConditions, DeviceType >;
+   using RightHandSidePointer = Pointers::SharedPointer< RightHandSide, DeviceType >;
+   using MeshFunctionPointer = Pointers::SharedPointer< MeshFunction, DeviceType >;
+   using TraverserUserDataPointer = Pointers::SharedPointer< TraverserUserData, DeviceType >;
 
    void
    setDifferentialOperator( const DifferentialOperatorPointer& differentialOperatorPointer )
@@ -166,14 +166,14 @@ public:
    class TraverserInteriorEntitiesProcessor
    {
    public:
-      typedef typename MeshType::PointType PointType;
+      using PointType = typename MeshType::PointType;
 
       template< typename EntityType >
       __cuda_callable__
       static inline void
       processEntity( const MeshType& mesh, TraverserUserData& userData, const EntityType& entity )
       {
-         typedef Functions::FunctionAdapter< MeshType, RightHandSide > FunctionAdapter;
+         using FunctionAdapter = Functions::FunctionAdapter< MeshType, RightHandSide >;
          ( *userData.fu )( entity ) = ( *userData.differentialOperator )( *userData.u, entity, userData.time )
                                     + FunctionAdapter::getValue( *userData.rightHandSide, entity, userData.time );
       }
diff --git a/src/TNL/Solvers/PDE/LinearSystemAssembler.h b/src/TNL/Solvers/PDE/LinearSystemAssembler.h
index fe6ef22034..cd09d13b83 100644
--- a/src/TNL/Solvers/PDE/LinearSystemAssembler.h
+++ b/src/TNL/Solvers/PDE/LinearSystemAssembler.h
@@ -56,11 +56,11 @@ template< typename Mesh,
 class LinearSystemAssembler
 {
 public:
-   typedef typename MeshFunction::MeshType MeshType;
-   typedef typename MeshFunction::MeshPointer MeshPointer;
-   typedef typename MeshFunction::RealType RealType;
-   typedef typename MeshFunction::DeviceType DeviceType;
-   typedef typename MeshFunction::IndexType IndexType;
+   using MeshType = typename MeshFunction::MeshType;
+   using MeshPointer = typename MeshFunction::MeshPointer;
+   using RealType = typename MeshFunction::RealType;
+   using DeviceType = typename MeshFunction::DeviceType;
+   using IndexType = typename MeshFunction::IndexType;
 
    template< typename MatrixView >
    using TraverserUserData = LinearSystemAssemblerTraverserUserData< RealType,
@@ -72,11 +72,11 @@ public:
                                                                      MatrixView >;
 
    // typedef Pointers::SharedPointer<  Matrix, DeviceType > MatrixPointer;
-   typedef Pointers::SharedPointer< DifferentialOperator, DeviceType > DifferentialOperatorPointer;
-   typedef Pointers::SharedPointer< BoundaryConditions, DeviceType > BoundaryConditionsPointer;
-   typedef Pointers::SharedPointer< RightHandSide, DeviceType > RightHandSidePointer;
-   typedef Pointers::SharedPointer< MeshFunction, DeviceType > MeshFunctionPointer;
-   typedef Pointers::SharedPointer< DofVector, DeviceType > DofVectorPointer;
+   using DifferentialOperatorPointer = Pointers::SharedPointer< DifferentialOperator, DeviceType >;
+   using BoundaryConditionsPointer = Pointers::SharedPointer< BoundaryConditions, DeviceType >;
+   using RightHandSidePointer = Pointers::SharedPointer< RightHandSide, DeviceType >;
+   using MeshFunctionPointer = Pointers::SharedPointer< MeshFunction, DeviceType >;
+   using DofVectorPointer = Pointers::SharedPointer< DofVector, DeviceType >;
 
    void
    setDifferentialOperator( const DifferentialOperatorPointer& differentialOperatorPointer )
@@ -157,8 +157,8 @@ public:
          userData.differentialOperator->setMatrixElements(
             *userData.u, entity, userData.time + userData.tau, userData.tau, userData.matrix, *userData.b );
 
-         typedef Functions::FunctionAdapter< MeshType, RightHandSide > RhsFunctionAdapter;
-         typedef Functions::FunctionAdapter< MeshType, MeshFunction > MeshFunctionAdapter;
+         using RhsFunctionAdapter = Functions::FunctionAdapter< MeshType, RightHandSide >;
+         using MeshFunctionAdapter = Functions::FunctionAdapter< MeshType, MeshFunction >;
          const RealType& rhs = RhsFunctionAdapter::getValue( *userData.rightHandSide, entity, userData.time );
          TimeDiscretisation::applyTimeDiscretisation( userData.matrix,
                                                       ( *userData.b )[ entity.getIndex() ],
diff --git a/src/TNL/Solvers/PDE/SemiImplicitTimeStepper.h b/src/TNL/Solvers/PDE/SemiImplicitTimeStepper.h
index 98d60d4823..99d3d9de7f 100644
--- a/src/TNL/Solvers/PDE/SemiImplicitTimeStepper.h
+++ b/src/TNL/Solvers/PDE/SemiImplicitTimeStepper.h
@@ -22,14 +22,14 @@ template< typename Problem >
 class SemiImplicitTimeStepper
 {
 public:
-   typedef Problem ProblemType;
-   typedef typename Problem::RealType RealType;
-   typedef typename Problem::DeviceType DeviceType;
-   typedef typename Problem::IndexType IndexType;
-   typedef typename Problem::MeshType MeshType;
-   typedef typename ProblemType::DofVectorType DofVectorType;
-   typedef Pointers::SharedPointer< DofVectorType, DeviceType > DofVectorPointer;
-   typedef IterativeSolverMonitor< RealType, IndexType > SolverMonitorType;
+   using ProblemType = Problem;
+   using RealType = typename Problem::RealType;
+   using DeviceType = typename Problem::DeviceType;
+   using IndexType = typename Problem::IndexType;
+   using MeshType = typename Problem::MeshType;
+   using DofVectorType = typename ProblemType::DofVectorType;
+   using DofVectorPointer = Pointers::SharedPointer< DofVectorType, DeviceType >;
+   using SolverMonitorType = IterativeSolverMonitor< RealType, IndexType >;
 
    using MatrixType = typename ProblemType::MatrixType;
    using MatrixPointer = std::shared_ptr< MatrixType >;
diff --git a/src/TNL/Solvers/PDE/TimeDependentPDESolver.h b/src/TNL/Solvers/PDE/TimeDependentPDESolver.h
index 1c81f60e00..cd9e826ea6 100644
--- a/src/TNL/Solvers/PDE/TimeDependentPDESolver.h
+++ b/src/TNL/Solvers/PDE/TimeDependentPDESolver.h
@@ -29,13 +29,13 @@ public:
    using IndexType = typename Problem::IndexType;
    using BaseType = PDESolver< RealType, IndexType >;
    using ProblemType = Problem;
-   typedef typename ProblemType::MeshType MeshType;
-   typedef typename ProblemType::DofVectorType DofVectorType;
-   typedef typename ProblemType::CommonDataType CommonDataType;
-   typedef typename ProblemType::CommonDataPointer CommonDataPointer;
-   typedef Pointers::SharedPointer< MeshType, DeviceType > MeshPointer;
-   typedef Pointers::SharedPointer< DofVectorType, DeviceType > DofVectorPointer;
-   typedef IterativeSolverMonitor< typename Problem::RealType, typename Problem::IndexType > SolverMonitorType;
+   using MeshType = typename ProblemType::MeshType;
+   using DofVectorType = typename ProblemType::DofVectorType;
+   using CommonDataType = typename ProblemType::CommonDataType;
+   using CommonDataPointer = typename ProblemType::CommonDataPointer;
+   using MeshPointer = Pointers::SharedPointer< MeshType, DeviceType >;
+   using DofVectorPointer = Pointers::SharedPointer< DofVectorType, DeviceType >;
+   using SolverMonitorType = IterativeSolverMonitor< typename Problem::RealType, typename Problem::IndexType >;
 
    static_assert( ProblemType::isTimeDependent(), "The problem is not time dependent." );
 
diff --git a/src/TNL/Solvers/PDE/TimeIndependentPDESolver.h b/src/TNL/Solvers/PDE/TimeIndependentPDESolver.h
index dfa0eee815..986876a124 100644
--- a/src/TNL/Solvers/PDE/TimeIndependentPDESolver.h
+++ b/src/TNL/Solvers/PDE/TimeIndependentPDESolver.h
@@ -37,12 +37,12 @@ public:
    using IndexType = typename Problem::IndexType;
    using BaseType = PDESolver< RealType, IndexType >;
    using ProblemType = Problem;
-   typedef typename ProblemType::MeshType MeshType;
-   typedef typename ProblemType::DofVectorType DofVectorType;
-   typedef Pointers::SharedPointer< MeshType, DeviceType > MeshPointer;
-   typedef Pointers::SharedPointer< DofVectorType, DeviceType > DofVectorPointer;
-   typedef typename ProblemType::CommonDataType CommonDataType;
-   typedef typename ProblemType::CommonDataPointer CommonDataPointer;
+   using MeshType = typename ProblemType::MeshType;
+   using DofVectorType = typename ProblemType::DofVectorType;
+   using MeshPointer = Pointers::SharedPointer< MeshType, DeviceType >;
+   using DofVectorPointer = Pointers::SharedPointer< DofVectorType, DeviceType >;
+   using CommonDataType = typename ProblemType::CommonDataType;
+   using CommonDataPointer = typename ProblemType::CommonDataPointer;
 
    TimeIndependentPDESolver();
 
diff --git a/src/TNL/Solvers/SolverStarter.hpp b/src/TNL/Solvers/SolverStarter.hpp
index f6b02cc1af..39a088e19e 100644
--- a/src/TNL/Solvers/SolverStarter.hpp
+++ b/src/TNL/Solvers/SolverStarter.hpp
@@ -182,7 +182,7 @@ public:
    static bool
    run( Problem& problem, const Config::ParameterContainer& parameters )
    {
-      typedef PDE::SemiImplicitTimeStepper< Problem > TimeStepper;
+      using TimeStepper = PDE::SemiImplicitTimeStepper< Problem >;
       SolverStarter< ConfigTag > solverStarter;
       return solverStarter.template runPDESolver< Problem, TimeStepper >( problem, parameters );
    }
@@ -224,7 +224,7 @@ public:
    static bool
    run( Problem& problem, const Config::ParameterContainer& parameters )
    {
-      typedef PDE::ExplicitTimeStepper< Problem, ExplicitSolverTag::template Template > TimeStepper;
+      using TimeStepper = PDE::ExplicitTimeStepper< Problem, ExplicitSolverTag::template Template >;
       SolverStarter< ConfigTag > solverStarter;
       return solverStarter.template runPDESolver< Problem, TimeStepper >( problem, parameters );
    }
diff --git a/src/TNL/TypeTraits.h b/src/TNL/TypeTraits.h
index f4433fb952..4d3972af27 100644
--- a/src/TNL/TypeTraits.h
+++ b/src/TNL/TypeTraits.h
@@ -26,8 +26,8 @@ template< typename T >
 class HasGetArrayDataMethod
 {
 private:
-   typedef char YesType[1];
-   typedef char NoType[2];
+   using YesType = char[1];
+   using NoType = char[2];
 
    template< typename C > static YesType& test( decltype(std::declval< C >().getArrayData()) );
    template< typename C > static NoType& test(...);
@@ -43,8 +43,8 @@ template< typename T >
 class HasGetSizeMethod
 {
 private:
-   typedef char YesType[1];
-   typedef char NoType[2];
+   using YesType = char[1];
+   using NoType = char[2];
 
    template< typename C > static YesType& test( decltype(std::declval< C >().getSize() ) );
    template< typename C > static NoType& test(...);
@@ -268,8 +268,8 @@ template< typename T >
 class HasGetCommunicatorMethod
 {
 private:
-   typedef char YesType[1];
-   typedef char NoType[2];
+   using YesType = char[1];
+   using NoType = char[2];
 
    template< typename C > static YesType& test( decltype(std::declval< C >().getCommunicator()) );
    template< typename C > static NoType& test(...);
diff --git a/src/Tools/tnl-dicom-reader.cpp b/src/Tools/tnl-dicom-reader.cpp
index 44c7e5d24c..179b1a2387 100644
--- a/src/Tools/tnl-dicom-reader.cpp
+++ b/src/Tools/tnl-dicom-reader.cpp
@@ -33,7 +33,7 @@ bool processDicomSeries( const Config::ParameterContainer& parameters )
    String meshFile = parameters.getParameter< String >( "mesh-file" );
    bool verbose = parameters.getParameter< bool >( "verbose" );
 
-   typedef Meshes::Grid< 2, double, Devices::Host, int > GridType;
+   using GridType = Meshes::Grid< 2, double, Devices::Host, int >;
    GridType grid;
    Containers::Vector< double, Devices::Host, int > vector;
    Images::RegionOfInterest< int > roi;
diff --git a/src/Tools/tnl-diff.h b/src/Tools/tnl-diff.h
index 0db35061f8..d2465eb8a5 100644
--- a/src/Tools/tnl-diff.h
+++ b/src/Tools/tnl-diff.h
@@ -202,7 +202,7 @@ bool computeDifferenceOfMeshFunctions( const MeshPointer& meshPointer, const Con
    if( verbose )
       std::cout << std::endl;
 
-   typedef typename MeshPointer::ObjectType Mesh;
+   using Mesh = typename MeshPointer::ObjectType;
    using MeshFunctionType = Functions::MeshFunction< Mesh, Mesh::getMeshDimension(), Real >;
    MeshFunctionType v1( meshPointer ), v2( meshPointer ), diff( meshPointer );
    Real totalL1Diff( 0.0 ), totalL2Diff( 0.0 ), totalMaxDiff( 0.0 );
@@ -553,7 +553,7 @@ bool processFiles( const Config::ParameterContainer& parameters )
    const String meshFile = parameters.getParameter< String >( "mesh" );
    const String meshFileFormat = parameters.getParameter< String >( "mesh-format" );
 
-   typedef Pointers::SharedPointer< Mesh > MeshPointer;
+   using MeshPointer = Pointers::SharedPointer< Mesh >;
    MeshPointer meshPointer;
    if( ! Meshes::loadMesh( *meshPointer, meshFile, meshFileFormat ) )
       return false;
diff --git a/src/Tools/tnl-grid-setup.h b/src/Tools/tnl-grid-setup.h
index fcb10bd06c..43aaca14dd 100644
--- a/src/Tools/tnl-grid-setup.h
+++ b/src/Tools/tnl-grid-setup.h
@@ -21,9 +21,9 @@ bool setupGrid( const Config::ParameterContainer& parameters )
       }
       IndexType sizeX = parameters.getParameter< int >( "size-x" );
 
-      typedef Meshes::Grid< 1, RealType, Devices::Host, IndexType > GridType;
-      typedef typename GridType::PointType PointType;
-      typedef typename GridType::CoordinatesType CoordinatesType;
+      using GridType = Meshes::Grid< 1, RealType, Devices::Host, IndexType >;
+      using PointType = typename GridType::PointType;
+      using CoordinatesType = typename GridType::CoordinatesType;
       GridType grid;
       grid.setDomain( PointType( originX ), PointType( proportionsX ) );
       grid.setDimensions( CoordinatesType( sizeX ) );
@@ -46,9 +46,9 @@ bool setupGrid( const Config::ParameterContainer& parameters )
       }
       IndexType sizeX = parameters.getParameter< int >( "size-x" );
       IndexType sizeY = parameters.getParameter< int >( "size-y" );
-      typedef Meshes::Grid< 2, RealType, Devices::Host, IndexType > GridType;
-      typedef typename GridType::PointType PointType;
-      typedef typename GridType::CoordinatesType CoordinatesType;
+      using GridType = Meshes::Grid< 2, RealType, Devices::Host, IndexType >;
+      using PointType = typename GridType::PointType;
+      using CoordinatesType = typename GridType::CoordinatesType;
       GridType grid;
       grid.setDomain( PointType( originX, originY ), PointType( proportionsX, proportionsY ) );
       grid.setDimensions( CoordinatesType( sizeX, sizeY ) );
@@ -86,9 +86,9 @@ bool setupGrid( const Config::ParameterContainer& parameters )
       IndexType sizeY = parameters.getParameter< int >( "size-y" );
       IndexType sizeZ = parameters.getParameter< int >( "size-z" );
 
-      typedef Meshes::Grid< 3, RealType, Devices::Host, IndexType > GridType;
-      typedef typename GridType::PointType PointType;
-      typedef typename GridType::CoordinatesType CoordinatesType;
+      using GridType = Meshes::Grid< 3, RealType, Devices::Host, IndexType >;
+      using PointType = typename GridType::PointType;
+      using CoordinatesType = typename GridType::CoordinatesType;
       GridType grid;
       grid.setDomain( PointType( originX, originY, originZ ), PointType( proportionsX, proportionsY, proportionsZ ) );
       grid.setDimensions( CoordinatesType( sizeX, sizeY, sizeZ ) );
diff --git a/src/Tools/tnl-init.h b/src/Tools/tnl-init.h
index 9e9d6a07b6..e1d4965b71 100644
--- a/src/Tools/tnl-init.h
+++ b/src/Tools/tnl-init.h
@@ -42,15 +42,15 @@ bool renderFunction( const Config::ParameterContainer& parameters )
       reader.loadMesh( *meshPointer );
    }
 
-   typedef Functions::TestFunction< MeshType::getMeshDimension(), RealType > FunctionType;
-   typedef Pointers::SharedPointer<  FunctionType, typename MeshType::DeviceType > FunctionPointer;
+   using FunctionType = Functions::TestFunction< MeshType::getMeshDimension(), RealType >;
+   using FunctionPointer = Pointers::SharedPointer< FunctionType, typename MeshType::DeviceType >;
    FunctionPointer function;
    std::cout << "Setting up the function ... " << std::endl;
    if( ! function->setup( parameters, "" ) )
       return false;
    std::cout << "done." << std::endl;
-   typedef Functions::MeshFunction< MeshType, MeshType::getMeshDimension() > MeshFunctionType;
-   typedef Pointers::SharedPointer<  MeshFunctionType, typename MeshType::DeviceType > MeshFunctionPointer;
+   using MeshFunctionType = Functions::MeshFunction< MeshType, MeshType::getMeshDimension() >;
+   using MeshFunctionPointer = Pointers::SharedPointer< MeshFunctionType, typename MeshType::DeviceType >;
    MeshFunctionPointer meshFunction( meshPointer );
    //if( ! discreteFunction.setSize( mesh.template getEntitiesCount< typename MeshType::Cell >() ) )
    //   return false;
-- 
GitLab