diff --git a/dune/gfe/averageinterface.hh b/dune/gfe/averageinterface.hh
index c57c98a5ab8749cae92a86a018d8377a1eaa2696..76c447eaf67e37a00a3aa34f676372663cf54d4a 100644
--- a/dune/gfe/averageinterface.hh
+++ b/dune/gfe/averageinterface.hh
@@ -37,7 +37,7 @@ class PressureAverager : public Ipopt::TNLP
     typedef typename MatrixType::row_type RowType;
 
 
-    enum {dim=GridView::dimension};
+    constexpr static int dim = GridView::dimension;
 
 public:
     /** \brief Constructor */
diff --git a/dune/gfe/chiralskyrmionenergy.hh b/dune/gfe/chiralskyrmionenergy.hh
index 5756c3ec23c5d837006ec59ee84aff675b0de25c..69b4b7e2ca8d10e8e7cf73eda123b62945096574 100644
--- a/dune/gfe/chiralskyrmionenergy.hh
+++ b/dune/gfe/chiralskyrmionenergy.hh
@@ -27,7 +27,7 @@ class ChiralSkyrmionEnergy
   typedef typename GridView::template Codim<0>::Entity Entity;
 
   // some other sizes
-  enum {gridDim=GridView::dimension};
+  constexpr static int gridDim = GridView::dimension;
 
 public:
 
@@ -38,7 +38,7 @@ public:
   }
 
   //! Dimension of a tangent space
-  enum { blocksize = TargetSpace::TangentVector::dimension };
+  constexpr static int blocksize = TargetSpace::TangentVector::dimension;
 
   /** \brief Assemble the energy for a single element */
   RT energy (const typename Basis::LocalView& localView,
diff --git a/dune/gfe/cosseratenergystiffness.hh b/dune/gfe/cosseratenergystiffness.hh
index 9d402a241e42ca47e6693978187286db56d572d6..6f308de6207222da4808764ee1089b9b0489d9a8 100644
--- a/dune/gfe/cosseratenergystiffness.hh
+++ b/dune/gfe/cosseratenergystiffness.hh
@@ -70,8 +70,8 @@ class CosseratEnergyLocalStiffness
     typedef typename GridView::template Codim<0>::Entity Entity;
 
     // some other sizes
-    enum {gridDim=GridView::dimension};
-    enum {dimworld=GridView::dimensionworld};
+    constexpr static int gridDim = GridView::dimension;
+    constexpr static int dimworld = GridView::dimensionworld;
 
     /** \brief Compute the (row-wise) curl of a matrix R \f$
         \param DR The partial derivatives of the matrix R
diff --git a/dune/gfe/cosseratrodenergy.hh b/dune/gfe/cosseratrodenergy.hh
index 6ccb14e2a701c89b72aeb6051826d88e75726fe4..3bd7adfa4589290cb3e1261644181323ee8563c2 100644
--- a/dune/gfe/cosseratrodenergy.hh
+++ b/dune/gfe/cosseratrodenergy.hh
@@ -33,13 +33,13 @@ class CosseratRodEnergy
     typedef typename GridView::template Codim<0>::Entity Entity;
 
     // some other sizes
-    enum {dim=GridView::dimension};
+    constexpr static int dim = GridView::dimension;
 
     // Quadrature order used for the extension and shear energy
-    enum {shearQuadOrder = 2};
+    constexpr static int shearQuadOrder = 2;
 
     // Quadrature order used for the bending and torsion energy
-    enum {bendingQuadOrder = 2};
+    constexpr static int bendingQuadOrder = 2;
 
 public:
 
diff --git a/dune/gfe/embeddedglobalgfefunction.hh b/dune/gfe/embeddedglobalgfefunction.hh
index 9e48b78d7df4d13e06f6c2d8c8016be89cf74e82..3d770b157e7320f731fa4c2d8d35be85228a409b 100644
--- a/dune/gfe/embeddedglobalgfefunction.hh
+++ b/dune/gfe/embeddedglobalgfefunction.hh
@@ -32,12 +32,12 @@ public:
     typedef typename TargetSpace::EmbeddedTangentVector EmbeddedTangentVector;
 
     //! Dimension of the grid.
-    enum { gridDim = GridView::dimension };
+    constexpr static int gridDim = GridView::dimension;
 
     static constexpr auto dimworld = GridView::dimensionworld;
 
     //! Dimension of the embedded tanget space
-    enum { embeddedDim = EmbeddedTangentVector::dimension };
+    constexpr static int embeddedDim = EmbeddedTangentVector::dimension;
 
 
     //! Create global function by a global basis and the corresponding coefficient vector
diff --git a/dune/gfe/geodesicfeassembler.hh b/dune/gfe/geodesicfeassembler.hh
index cdd98f405361db054429f9288f69331cebbaa418..01d0d2791f12d1b860305f165e56e171cd790167 100644
--- a/dune/gfe/geodesicfeassembler.hh
+++ b/dune/gfe/geodesicfeassembler.hh
@@ -20,10 +20,10 @@ class GeodesicFEAssembler {
     using LocalStiffness = LocalGeodesicFEStiffness<Basis, TargetSpace>;
 
     //! Dimension of the grid.
-    enum { gridDim = GridView::dimension };
+    constexpr static int gridDim = GridView::dimension;
 
     //! Dimension of a tangent space
-    enum { blocksize = TargetSpace::TangentVector::dimension };
+    constexpr static int blocksize = TargetSpace::TangentVector::dimension;
 
     //!
     typedef Dune::FieldMatrix<double, blocksize, blocksize> MatrixBlock;
diff --git a/dune/gfe/geodesicfeassemblerwrapper.hh b/dune/gfe/geodesicfeassemblerwrapper.hh
index c42a1e3ef63b001b01d231de9fc95a7947648096..eb15d7dc6e7e0983fc67465d5749299cd615ec3d 100644
--- a/dune/gfe/geodesicfeassemblerwrapper.hh
+++ b/dune/gfe/geodesicfeassemblerwrapper.hh
@@ -18,12 +18,12 @@ GeodesicFEAssemblerWrapper {
     typedef typename Basis::GridView GridView;
 
     //! Dimension of the grid.
-    enum { gridDim = GridView::dimension };
+    constexpr static int gridDim = GridView::dimension;
 
     //! Dimension of the tangent space
-    enum { blocksize = TargetSpace::TangentVector::dimension };
-    enum { blocksize0 = MixedSpace0::TangentVector::dimension };
-    enum { blocksize1 = MixedSpace1::TangentVector::dimension };
+    constexpr static int blocksize = TargetSpace::TangentVector::dimension;
+    constexpr static int blocksize0 = MixedSpace0::TangentVector::dimension;
+    constexpr static int blocksize1 = MixedSpace1::TangentVector::dimension;
 
     //!
     typedef Dune::FieldMatrix<double, blocksize, blocksize> MatrixBlock;
diff --git a/dune/gfe/globalgeodesicfefunction.hh b/dune/gfe/globalgeodesicfefunction.hh
index 1f5ea96161104118b48919bc3d350245c725a07b..beba422c1cc58daf35979dca5a8c70767bf34250 100644
--- a/dune/gfe/globalgeodesicfefunction.hh
+++ b/dune/gfe/globalgeodesicfefunction.hh
@@ -44,10 +44,10 @@ public:
     typedef typename TargetSpace::EmbeddedTangentVector EmbeddedTangentVector;
 
     //! Dimension of the grid.
-    enum { gridDim = GridView::dimension };
+    constexpr static int gridDim = GridView::dimension;
 
     //! Dimension of the embedded tanget space
-    enum { embeddedDim = EmbeddedTangentVector::dimension };
+    constexpr static int embeddedDim = EmbeddedTangentVector::dimension;
 
 
     //! Create global function by a global basis and the corresponding coefficient vector
diff --git a/dune/gfe/harmonicenergy.hh b/dune/gfe/harmonicenergy.hh
index 457e32919cb9482a20a7452a212ad488c38f72fd..eaa0421d311fbdccbe91a0027784b69144951a26 100644
--- a/dune/gfe/harmonicenergy.hh
+++ b/dune/gfe/harmonicenergy.hh
@@ -16,7 +16,7 @@ class HarmonicEnergy
     typedef typename TargetSpace::ctype RT;
 
     // some other sizes
-    enum {gridDim=GridView::dimension};
+    constexpr static int gridDim = GridView::dimension;
 
 public:
 
diff --git a/dune/gfe/l2distancesquaredenergy.hh b/dune/gfe/l2distancesquaredenergy.hh
index 911abfabf3823b96425a02a13b958ff1e6390c20..2546e70d5c5867f1f33bde7a8dc917e6dcec1c3b 100644
--- a/dune/gfe/l2distancesquaredenergy.hh
+++ b/dune/gfe/l2distancesquaredenergy.hh
@@ -18,7 +18,7 @@ class L2DistanceSquaredEnergy
   typedef typename TargetSpace::ctype RT;
 
   // some other sizes
-  enum {gridDim=GridView::dimension};
+  constexpr static int gridDim = GridView::dimension;
 
 public:
 
diff --git a/dune/gfe/localgeodesicfeadolcstiffness.hh b/dune/gfe/localgeodesicfeadolcstiffness.hh
index f7c4d27c629fd9b6e61344f0e524bf039a05bd59..9bbf4c0cc5535ab7cdde8a8e1ae5f5adbb75ab36 100644
--- a/dune/gfe/localgeodesicfeadolcstiffness.hh
+++ b/dune/gfe/localgeodesicfeadolcstiffness.hh
@@ -32,15 +32,15 @@ class LocalGeodesicFEADOLCStiffness
     typedef typename TargetSpace::template rebind<adouble>::other ATargetSpace;
 
     // some other sizes
-    enum {gridDim=GridView::dimension};
+    constexpr static int gridDim = GridView::dimension;
 
 public:
 
     //! Dimension of a tangent space
-    enum { blocksize = TargetSpace::TangentVector::dimension };
+    constexpr static int blocksize = TargetSpace::TangentVector::dimension;
 
     //! Dimension of the embedding space
-    enum { embeddedBlocksize = TargetSpace::EmbeddedTangentVector::dimension };
+    constexpr static int embeddedBlocksize = TargetSpace::EmbeddedTangentVector::dimension;
 
     LocalGeodesicFEADOLCStiffness(const Dune::GFE::LocalEnergy<Basis, ATargetSpace>* energy)
     : localEnergy_(energy)
diff --git a/dune/gfe/localgeodesicfefdstiffness.hh b/dune/gfe/localgeodesicfefdstiffness.hh
index 01503abf343c1001d43fefafe4007ab6ccb187e5..61d3cd250f70c4587f2ba6120ca651e9196161fd 100644
--- a/dune/gfe/localgeodesicfefdstiffness.hh
+++ b/dune/gfe/localgeodesicfefdstiffness.hh
@@ -21,15 +21,15 @@ class LocalGeodesicFEFDStiffness
     typedef typename TargetSpace::template rebind<field_type>::other ATargetSpace;
 
     // some other sizes
-    enum {gridDim=GridView::dimension};
+    constexpr static int gridDim = GridView::dimension;
 
 public:
 
     //! Dimension of a tangent space
-    enum { blocksize = TargetSpace::TangentVector::dimension };
+    constexpr static int blocksize = TargetSpace::TangentVector::dimension;
 
     //! Dimension of the embedding space
-    enum { embeddedBlocksize = TargetSpace::EmbeddedTangentVector::dimension };
+    constexpr static int embeddedBlocksize = TargetSpace::EmbeddedTangentVector::dimension;
 
     LocalGeodesicFEFDStiffness(const Dune::GFE::LocalEnergy<Basis, ATargetSpace>* energy)
     : localEnergy_(energy)
diff --git a/dune/gfe/localgeodesicfestiffness.hh b/dune/gfe/localgeodesicfestiffness.hh
index ca0205e0ab4d49532a6d00f9cd8f8bf4415929b6..ff3d17abf8039de0f9d464d4d4adf6c6519ed25f 100644
--- a/dune/gfe/localgeodesicfestiffness.hh
+++ b/dune/gfe/localgeodesicfestiffness.hh
@@ -17,15 +17,15 @@ class LocalGeodesicFEStiffness
     typedef typename GridView::template Codim<0>::Entity Entity;
 
     // some other sizes
-    enum {gridDim=GridView::dimension};
+    constexpr static int gridDim = GridView::dimension;
 
 public:
 
     //! Dimension of a tangent space
-    enum { blocksize = TargetSpace::TangentVector::dimension };
+    constexpr static int blocksize = TargetSpace::TangentVector::dimension;
 
     //! Dimension of the embedding space
-    enum { embeddedBlocksize = TargetSpace::EmbeddedTangentVector::dimension };
+    constexpr static int embeddedBlocksize = TargetSpace::EmbeddedTangentVector::dimension;
 
     /** \brief Assemble the local gradient and stiffness matrix at the current position
 
diff --git a/dune/gfe/localintegralenergy.hh b/dune/gfe/localintegralenergy.hh
index e6d85ef1650633e8fadc113c135c6dc06bebf1f2..7e3e7b4ebe114e7397807ffa89813956ceda711b 100644
--- a/dune/gfe/localintegralenergy.hh
+++ b/dune/gfe/localintegralenergy.hh
@@ -29,7 +29,7 @@ class LocalIntegralEnergy
   using DT = typename GridView::Grid::ctype;
   using RT = typename Dune::GFE::LocalEnergy<Basis,TargetSpaces...>::RT;
 
-  enum {gridDim=GridView::dimension};
+  constexpr static int gridDim = GridView::dimension;
 
 public:
 
diff --git a/dune/gfe/mixedgfeassembler.hh b/dune/gfe/mixedgfeassembler.hh
index 883af00b678ae0d5e69dbb6d6da3b98b2d0a551e..a2bf0432ee4b2cb05e3050e4ccd326eccd13cf6d 100644
--- a/dune/gfe/mixedgfeassembler.hh
+++ b/dune/gfe/mixedgfeassembler.hh
@@ -19,11 +19,11 @@ class MixedGFEAssembler {
     typedef typename GridView::template Codim<0>::template Partition<Dune::Interior_Partition>::Iterator ElementIterator;
 
     //! Dimension of the grid.
-    enum { gridDim = GridView::dimension };
+    constexpr static int gridDim = GridView::dimension;
 
     //! Dimension of a tangent space
-    enum { blocksize0 = TargetSpace0::TangentVector::dimension };
-    enum { blocksize1 = TargetSpace1::TangentVector::dimension };
+    constexpr static int blocksize0 = TargetSpace0::TangentVector::dimension;
+    constexpr static int blocksize1 = TargetSpace1::TangentVector::dimension;
 
     //!
     typedef Dune::BCRSMatrix<Dune::FieldMatrix<double, blocksize0, blocksize0> > MatrixBlock00;
diff --git a/dune/gfe/mixedlocalgeodesicfestiffness.hh b/dune/gfe/mixedlocalgeodesicfestiffness.hh
index 68a6dbbb0f185f371891058188901aae74933861..d0245be4231b7a273bf3410d65abe2f5a615ded6 100644
--- a/dune/gfe/mixedlocalgeodesicfestiffness.hh
+++ b/dune/gfe/mixedlocalgeodesicfestiffness.hh
@@ -15,13 +15,13 @@ class MixedLocalGeodesicFEStiffness
     typedef typename GridView::template Codim<0>::Entity Entity;
 
     // some other sizes
-    enum {gridDim=GridView::dimension};
+    constexpr static int gridDim = GridView::dimension;
 
 public:
 
     //! Dimension of a tangent space
-    enum { deformationBlocksize = DeformationTargetSpace::TangentVector::dimension };
-    enum { orientationBlocksize = OrientationTargetSpace::TangentVector::dimension };
+    constexpr static int deformationBlocksize = DeformationTargetSpace::TangentVector::dimension;
+    constexpr static int orientationBlocksize = OrientationTargetSpace::TangentVector::dimension;
 
     /** \brief Assemble the local stiffness matrix at the current position
 
diff --git a/dune/gfe/mixedlocalgfeadolcstiffness.hh b/dune/gfe/mixedlocalgfeadolcstiffness.hh
index 75a34a0ae6ac4151be5c64ae9be782e43fb7e16b..3198cf0508666981591d42d6350439c626ca61f6 100644
--- a/dune/gfe/mixedlocalgfeadolcstiffness.hh
+++ b/dune/gfe/mixedlocalgfeadolcstiffness.hh
@@ -33,17 +33,17 @@ class MixedLocalGFEADOLCStiffness
     typedef typename TargetSpace1::template rebind<adouble>::other ATargetSpace1;
 
     // some other sizes
-    enum {gridDim=GridView::dimension};
+    constexpr static int gridDim = GridView::dimension;
 
 public:
 
     //! Dimension of a tangent space
-    enum { blocksize0 = TargetSpace0::TangentVector::dimension };
-    enum { blocksize1 = TargetSpace1::TangentVector::dimension };
+    constexpr static int blocksize0 = TargetSpace0::TangentVector::dimension;
+    constexpr static int blocksize1 = TargetSpace1::TangentVector::dimension;
 
     //! Dimension of the embedding space
-    enum { embeddedBlocksize0 = TargetSpace0::EmbeddedTangentVector::dimension };
-    enum { embeddedBlocksize1 = TargetSpace1::EmbeddedTangentVector::dimension };
+    constexpr static int embeddedBlocksize0 = TargetSpace0::EmbeddedTangentVector::dimension;
+    constexpr static int embeddedBlocksize1 = TargetSpace1::EmbeddedTangentVector::dimension;
 
     MixedLocalGFEADOLCStiffness(const MixedLocalGeodesicFEStiffness<Basis, ATargetSpace0,
                                                                     ATargetSpace1>* energy)
diff --git a/dune/gfe/neumannenergy.hh b/dune/gfe/neumannenergy.hh
index dd8f61b1c373c7958ee926244259a782ad5156d8..1c16908aca1aa716b95c57c2be45d0e2a6e048b0 100644
--- a/dune/gfe/neumannenergy.hh
+++ b/dune/gfe/neumannenergy.hh
@@ -24,7 +24,7 @@ class NeumannEnergy
   using DT = typename GridView::Grid::ctype;
   using RT = typename Dune::GFE::LocalEnergy<Basis,TargetSpaces...>::RT;
 
-  enum {dim=GridView::dimension};
+  constexpr static int dim = GridView::dimension;
 
 public:
 
diff --git a/dune/gfe/nonplanarcosseratshellenergy.hh b/dune/gfe/nonplanarcosseratshellenergy.hh
index f8d4b3bf8ba55e79cbd29b14dc270dc18177426f..e8a3678eed7a6c7880bea11b2a400e9ab451bb53 100644
--- a/dune/gfe/nonplanarcosseratshellenergy.hh
+++ b/dune/gfe/nonplanarcosseratshellenergy.hh
@@ -44,8 +44,8 @@ class NonplanarCosseratShellEnergy
   typedef typename GridView::template Codim<0>::Entity Entity;
 
   // some other sizes
-  enum {gridDim=GridView::dimension};
-  enum {dimworld=GridView::dimensionworld};
+  constexpr static int gridDim = GridView::dimension;
+  constexpr static int dimworld = GridView::dimensionworld;
 
 public:
 
diff --git a/dune/gfe/periodic1dpq1nodalbasis.hh b/dune/gfe/periodic1dpq1nodalbasis.hh
index f1f415e7b8a2d64b60a133eabb4fdeb7578eec4e..caf7950981c7f37a3002f9d5f5566ae6941f5a10 100644
--- a/dune/gfe/periodic1dpq1nodalbasis.hh
+++ b/dune/gfe/periodic1dpq1nodalbasis.hh
@@ -174,7 +174,7 @@ protected:
 template<typename GV, class MI>
 class Periodic1DPQ1NodeIndexSet
 {
-  enum {dim = GV::dimension};
+  constexpr static int dim = GV::dimension;
 
 public:
 
diff --git a/dune/gfe/surfacecosseratenergy.hh b/dune/gfe/surfacecosseratenergy.hh
index 393d8d897c1f12614d839525ce47b065a23749e2..0f4315c9e53dcec0cb702d700dc36ce4528d62a7 100644
--- a/dune/gfe/surfacecosseratenergy.hh
+++ b/dune/gfe/surfacecosseratenergy.hh
@@ -38,8 +38,8 @@ class SurfaceCosseratEnergy
   using RBM1 = Rotation<RT,GridView::dimensionworld> ;
   using RBM = RigidBodyMotion<RT,GridView::dimensionworld> ;
 
-  enum {dimWorld=GridView::dimensionworld};
-  enum {gridDim=GridView::dimension};
+  constexpr static int dimWorld = GridView::dimensionworld;
+  constexpr static int gridDim = GridView::dimension;
   static constexpr int boundaryDim = gridDim - 1;
 
   /** \brief Compute the derivative of the rotation (with respect to x), but wrt matrix coordinates
diff --git a/dune/gfe/trustregionmmgbasesolver.hh b/dune/gfe/trustregionmmgbasesolver.hh
index 7b4d9aa29f193af99ca5841e4314b168e0b91cde..416087a874bf750c85cdbd8c7d3cb24726ca1af6 100644
--- a/dune/gfe/trustregionmmgbasesolver.hh
+++ b/dune/gfe/trustregionmmgbasesolver.hh
@@ -31,7 +31,7 @@ class TrustRegionMMGBaseSolver
     // For complex-valued data
     typedef typename Dune::FieldTraits<field_type>::real_type real_type;
 
-    enum {blocksize = VectorType::value_type::dimension};
+    constexpr static int blocksize = VectorType::value_type::dimension;
     typedef Dune::BitSetVector<blocksize> BitVectorType;
 
 public:
diff --git a/dune/gfe/weightedsumenergy.hh b/dune/gfe/weightedsumenergy.hh
index 57795057f3bd89ceb50e7c786511d13dbec86def..aebc046a224c7b9e113a44ad286d0a909b4dcdff 100644
--- a/dune/gfe/weightedsumenergy.hh
+++ b/dune/gfe/weightedsumenergy.hh
@@ -19,7 +19,7 @@ class WeightedSumEnergy
   typedef typename TargetSpace::ctype RT;
 
   // some other sizes
-  enum {gridDim=GridView::dimension};
+  constexpr static int gridDim = GridView::dimension;
 
 public:
 
diff --git a/test/adolctest.cc b/test/adolctest.cc
index 97c1bed73d95d3b7b55c5e7cf62f743d08ae2157..550f61cc19182de52a777271f60ea8b67778854f 100644
--- a/test/adolctest.cc
+++ b/test/adolctest.cc
@@ -66,12 +66,12 @@ class LocalADOLCStiffness
     typedef typename TargetSpace::template rebind<adouble>::other ATargetSpace;
 
     // some other sizes
-    enum {gridDim=GridView::dimension};
+    constexpr static int gridDim = GridView::dimension;
 
 public:
 
     //! Dimension of the embedding space
-    enum { embeddedBlocksize = TargetSpace::EmbeddedTangentVector::dimension };
+    constexpr static int embeddedBlocksize = TargetSpace::EmbeddedTangentVector::dimension;
 
     LocalADOLCStiffness(const GFE::LocalEnergy<Basis, ATargetSpace>* energy)
     : localEnergy_(energy)
@@ -223,10 +223,10 @@ class LocalFDStiffness
 public:
 
     //! Dimension of a tangent space
-    enum { blocksize = TargetSpace::TangentVector::dimension };
+    constexpr static int blocksize = TargetSpace::TangentVector::dimension;
 
     //! Dimension of the embedding space
-    enum { embeddedBlocksize = TargetSpace::EmbeddedTangentVector::dimension };
+    constexpr static int embeddedBlocksize = TargetSpace::EmbeddedTangentVector::dimension;
 
     LocalFDStiffness(const GFE::LocalEnergy<Basis, ATargetSpace>* energy)
     : localEnergy_(energy)
@@ -415,8 +415,8 @@ int main (int argc, char *argv[]) try
     MPIHelper::instance(argc, argv);
 
     typedef std::vector<TargetSpace> SolutionType;
-    enum { embeddedBlocksize = TargetSpace::EmbeddedTangentVector::dimension };
-    enum { blocksize = TargetSpace::TangentVector::dimension };
+    constexpr static int embeddedBlocksize = TargetSpace::EmbeddedTangentVector::dimension;
+    constexpr static int blocksize = TargetSpace::TangentVector::dimension;
 
     // ///////////////////////////////////////
     //    Create the grid