diff --git a/dynare++/integ/cc/product.hh b/dynare++/integ/cc/product.hh
index 2265ee82634b0f7db3957ceb8a8b684b81efca11..3ded7b2ac2f1615ae64d29781c82581b75a45f15 100644
--- a/dynare++/integ/cc/product.hh
+++ b/dynare++/integ/cc/product.hh
@@ -94,8 +94,7 @@ class ProductQuadrature : public QuadratureImpl<prodpit>
 public:
   ProductQuadrature(int d, const OneDQuadrature &uq);
   virtual ~ProductQuadrature()
-  {
-  }
+  = default;
   int
   numEvals(int l) const
   {
diff --git a/dynare++/integ/cc/quadrature.hh b/dynare++/integ/cc/quadrature.hh
index 8ae43f647fd6eac50f97fe0e4757e67f2f66411e..d68272c7bb6fadcaec842b3189bc7f60789d2755 100644
--- a/dynare++/integ/cc/quadrature.hh
+++ b/dynare++/integ/cc/quadrature.hh
@@ -44,8 +44,7 @@ class OneDQuadrature
 {
 public:
   virtual ~OneDQuadrature()
-  {
-  }
+  = default;
   virtual int numLevels() const = 0;
   virtual int numPoints(int level) const = 0;
   virtual double point(int level, int i) const = 0;
@@ -74,8 +73,7 @@ public:
   {
   }
   virtual ~Quadrature()
-  {
-  }
+  = default;
   int
   dimen() const
   {
@@ -249,8 +247,7 @@ public:
     calcOffsets();
   }
   virtual ~OneDPrecalcQuadrature()
-  {
-  }
+  = default;
   int
   numLevels() const
   {
diff --git a/dynare++/integ/cc/quasi_mcarlo.hh b/dynare++/integ/cc/quasi_mcarlo.hh
index 5385b688651e97ecd39d65b3ca98e9dc414aefd2..189cb16d5216d8702ecb54c37b44c04552a11e3e 100644
--- a/dynare++/integ/cc/quasi_mcarlo.hh
+++ b/dynare++/integ/cc/quasi_mcarlo.hh
@@ -40,11 +40,9 @@ class PermutationScheme
 {
 public:
   PermutationScheme()
-  {
-  }
+  = default;
   virtual ~PermutationScheme()
-  {
-  }
+  = default;
   virtual int permute(int i, int base, int c) const  = 0;
 };
 
@@ -68,16 +66,11 @@ class RadicalInverse
 public:
   RadicalInverse(int n, int b, int mxn);
   RadicalInverse(const RadicalInverse &ri)
-    : num(ri.num), base(ri.base), maxn(ri.maxn), j(ri.j), coeff(ri.coeff)
-  {
-  }
-  const RadicalInverse &
+     
+  = default;
+  RadicalInverse &
   operator=(const RadicalInverse &radi)
-  {
-    num = radi.num; base = radi.base; maxn = radi.maxn;
-    j = radi.j; coeff = radi.coeff;
-    return *this;
-  }
+  = default;
   double eval(const PermutationScheme &p) const;
   void increase();
   void print() const;
@@ -103,9 +96,8 @@ protected:
 public:
   HaltonSequence(int n, int mxn, int dim, const PermutationScheme &p);
   HaltonSequence(const HaltonSequence &hs)
-    : num(hs.num), maxn(hs.maxn), ri(hs.ri), per(hs.per), pt(hs.pt)
-  {
-  }
+     
+  = default;
   const HaltonSequence &operator=(const HaltonSequence &hs);
   void increase();
   const Vector &
@@ -140,8 +132,7 @@ public:
   {
   }
   virtual ~QMCSpecification()
-  {
-  }
+  = default;
   int
   dimen() const
   {
@@ -216,8 +207,7 @@ public:
   {
   }
   virtual ~QMCarloCubeQuadrature()
-  {
-  }
+  = default;
   int
   numEvals(int l) const
   {
@@ -291,8 +281,7 @@ public:
   {
   }
   virtual ~QMCarloNormalQuadrature()
-  {
-  }
+  = default;
   int
   numEvals(int l) const
   {
diff --git a/dynare++/integ/cc/smolyak.hh b/dynare++/integ/cc/smolyak.hh
index 218d50a0726e005da2587ead2e4f0a01f13d27df..bef067b2ef0095afd686392e28268bf50ba21e51 100644
--- a/dynare++/integ/cc/smolyak.hh
+++ b/dynare++/integ/cc/smolyak.hh
@@ -109,8 +109,7 @@ class SmolyakQuadrature : public QuadratureImpl<smolpit>
 public:
   SmolyakQuadrature(int d, int l, const OneDQuadrature &uq);
   virtual ~SmolyakQuadrature()
-  {
-  }
+  = default;
   virtual int numEvals(int level) const;
   void designLevelForEvals(int max_eval, int &lev, int &evals) const;
 protected:
diff --git a/dynare++/integ/cc/vector_function.hh b/dynare++/integ/cc/vector_function.hh
index bcef366af228be605c7e050839d83c8486e255fe..74d1da377a62c766410aa8a0971a85799be7c4c0 100644
--- a/dynare++/integ/cc/vector_function.hh
+++ b/dynare++/integ/cc/vector_function.hh
@@ -72,12 +72,10 @@ public:
   {
   }
   VectorFunction(const VectorFunction &func)
-    : in_dim(func.in_dim), out_dim(func.out_dim)
-  {
-  }
+     
+  = default;
   virtual ~VectorFunction()
-  {
-  }
+  = default;
   virtual VectorFunction *clone() const = 0;
   virtual void eval(const Vector &point, const ParameterSignal &sig, Vector &out) = 0;
   int
diff --git a/dynare++/integ/testing/tests.cc b/dynare++/integ/testing/tests.cc
index 76e2db514a6eca93aa3fcbf8c5d140d9ff144efe..97a0250a3210649f17c6410a171078f4cdb870e6 100644
--- a/dynare++/integ/testing/tests.cc
+++ b/dynare++/integ/testing/tests.cc
@@ -34,9 +34,8 @@ public:
   {
   }
   MomentFunction(const MomentFunction &func)
-    : VectorFunction(func), D(func.D), k(func.k)
-  {
-  }
+     
+  = default;
   VectorFunction *
   clone() const
   {
@@ -70,9 +69,8 @@ public:
   {
   }
   TensorPower(const TensorPower &func)
-    : VectorFunction(func), k(func.k)
-  {
-  }
+     
+  = default;
   VectorFunction *
   clone() const
   {
@@ -143,9 +141,8 @@ public:
   {
   }
   Function1Trans(const Function1Trans &func)
-    : Function1(func)
-  {
-  }
+     
+  = default;
   VectorFunction *
   clone() const
   {
diff --git a/dynare++/kord/decision_rule.hh b/dynare++/kord/decision_rule.hh
index 6f7757eb420a09ef203f818d16b5f68e71aafb1a..b15aeebf610fef6f3c4281102468c728e29d3631 100644
--- a/dynare++/kord/decision_rule.hh
+++ b/dynare++/kord/decision_rule.hh
@@ -33,8 +33,7 @@ class ShockRealization
 {
 public:
   virtual ~ShockRealization()
-  {
-  }
+  = default;
   virtual void get(int n, Vector &out) = 0;
   virtual int numShocks() const = 0;
 };
@@ -57,8 +56,7 @@ class DecisionRule
 public:
   enum emethod { horner, trad };
   virtual ~DecisionRule()
-  {
-  }
+  = default;
   virtual TwoDMatrix *simulate(emethod em, int np, const Vector &ystart,
                                ShockRealization &sr) const = 0;
   virtual void eval(emethod em, Vector &out, const ConstVector &v) const = 0;
@@ -1002,8 +1000,7 @@ public:
   {
   }
   virtual ~RandomShockRealization()
-  {
-  }
+  = default;
   void get(int n, Vector &out);
   int
   numShocks() const
diff --git a/dynare++/kord/dynamic_model.hh b/dynare++/kord/dynamic_model.hh
index 8cd11c1dd555b604311de2017a1fce9e6b04dd3a..b50977c50991879bb88eef3874e9c60d849eff0d 100644
--- a/dynare++/kord/dynamic_model.hh
+++ b/dynare++/kord/dynamic_model.hh
@@ -22,8 +22,7 @@ class NameList
 {
 public:
   virtual ~NameList()
-  {
-  }
+  = default;
   virtual int getNum() const = 0;
   virtual const char *getName(int i) const = 0;
   void print() const;
@@ -85,8 +84,7 @@ class DynamicModel
 public:
   virtual DynamicModel *clone() const = 0;
   virtual ~DynamicModel()
-  {
-  }
+  = default;
 
   virtual int nstat() const = 0;
   virtual int nboth() const = 0;
diff --git a/dynare++/kord/global_check.hh b/dynare++/kord/global_check.hh
index ed1b1a1a6c625d4685744f7d511c7750e317e1e9..7234bcff3e5e3132d36d9636f75434b7ed2deb06 100644
--- a/dynare++/kord/global_check.hh
+++ b/dynare++/kord/global_check.hh
@@ -95,12 +95,10 @@ public:
   {
   }
   GResidFunction(const GResidFunction &rf)
-    : GaussConverterFunction(rf)
-  {
-  }
+     
+  = default;
   virtual ~GResidFunction()
-  {
-  }
+  = default;
   virtual VectorFunction *
   clone() const
   {
diff --git a/dynare++/kord/journal.hh b/dynare++/kord/journal.hh
index 5890d72233a4b100076dbd88d700a987ec6a960f..c3d40fcdaf3e0620dd1482cf59ae863d8e21b050 100644
--- a/dynare++/kord/journal.hh
+++ b/dynare++/kord/journal.hh
@@ -104,8 +104,7 @@ public:
     prefix[0] = '\0'; mes[0] = '\0'; writePrefix(flash);
   }
   virtual ~JournalRecord()
-  {
-  }
+  = default;
   JournalRecord &operator<<(const IntSequence &s);
   JournalRecord &
   operator<<(_Tfunc f)
diff --git a/dynare++/kord/kord_exception.hh b/dynare++/kord/kord_exception.hh
index 19833699da75f948f0b9f625a8803863f6b831ed..24857ee4095c4d81958d2f07ae30f7c252bc2fca 100644
--- a/dynare++/kord/kord_exception.hh
+++ b/dynare++/kord/kord_exception.hh
@@ -38,8 +38,7 @@ public:
     cd = c;
   }
   virtual ~KordException()
-  {
-  }
+  = default;
   virtual void
   print() const
   {
diff --git a/dynare++/kord/mersenne_twister.hh b/dynare++/kord/mersenne_twister.hh
index f171512051869dd15e410a612fffb4630057d103..a76b586696026c2fe426267d5c729e47c13d37ba 100644
--- a/dynare++/kord/mersenne_twister.hh
+++ b/dynare++/kord/mersenne_twister.hh
@@ -25,8 +25,7 @@ public:
   MersenneTwister(uint32 iseed);
   MersenneTwister(const MersenneTwister &mt);
   virtual ~MersenneTwister()
-  {
-  }
+  = default;
   uint32 lrand();
   double drand();
   double
diff --git a/dynare++/kord/normal_conjugate.cc b/dynare++/kord/normal_conjugate.cc
index aed725bdafa77dfbc3fac8bf5a925866c6ba3c14..09534af36850eba0de84354937e36d1762033f24 100644
--- a/dynare++/kord/normal_conjugate.cc
+++ b/dynare++/kord/normal_conjugate.cc
@@ -30,9 +30,8 @@ NormalConj::NormalConj(const ConstTwoDMatrix &ydata)
 }
 
 NormalConj::NormalConj(const NormalConj &nc)
-  : mu(nc.mu), kappa(nc.kappa), nu(nc.nu), lambda(nc.lambda)
-{
-}
+   
+= default;
 
 // |NormalConj::update| one observation code
 /* The method performs the following:
diff --git a/dynare++/kord/normal_conjugate.hh b/dynare++/kord/normal_conjugate.hh
index 8faed5e2d5d86f94d8ab1f5fc5fb4dac0079daf7..d80d178c04295332b72e945992a63d574217aa93 100644
--- a/dynare++/kord/normal_conjugate.hh
+++ b/dynare++/kord/normal_conjugate.hh
@@ -57,8 +57,7 @@ public:
   NormalConj(const NormalConj &nc);
 
   virtual ~NormalConj()
-  {
-  }
+  = default;
   void update(const ConstVector &y);
   void update(const ConstTwoDMatrix &ydata);
   void update(const NormalConj &nc);
diff --git a/dynare++/parser/cc/atom_assignings.hh b/dynare++/parser/cc/atom_assignings.hh
index c4c253b1af90cab2ef4351fa288d5277514c220b..14e4b62d249560780d91d023f14f889dc5d61871 100644
--- a/dynare++/parser/cc/atom_assignings.hh
+++ b/dynare++/parser/cc/atom_assignings.hh
@@ -52,8 +52,7 @@ namespace ogp
      * static atoms. */
     AtomAssignings(const AtomAssignings &aa, StaticAtoms &a);
     virtual ~AtomAssignings()
-    {
-    }
+    = default;
     /** Parse the assignments from the given string. */
     void parse(int length, const char *stream);
     /** Process a syntax error from bison. */
@@ -99,8 +98,7 @@ namespace ogp
     {
     }
     virtual ~AtomAsgnEvaluator()
-    {
-    }
+    = default;
     /** This sets all initial values to NaNs, all constants and
      * all values set by user by call set_value. This is called by
      * FormulaEvaluator::eval() method, which is called by eval()
diff --git a/dynare++/parser/cc/atom_substitutions.hh b/dynare++/parser/cc/atom_substitutions.hh
index b46f8855478ebbf80f6244bd5e782c3249fca133..36f523bb05baa4453eef7b3c379ca28598f38a4c 100644
--- a/dynare++/parser/cc/atom_substitutions.hh
+++ b/dynare++/parser/cc/atom_substitutions.hh
@@ -23,8 +23,7 @@ namespace ogp
   {
     int num_substs{0};
     SubstInfo()  
-    {
-    }
+    = default;
   };
 
   /** This class tracks all atom substitutions during the job and
@@ -74,8 +73,7 @@ namespace ogp
      * semantically same as the atoms from as. */
     AtomSubstitutions(const AtomSubstitutions &as, const FineAtoms &oa, FineAtoms &na);
     virtual ~AtomSubstitutions()
-    {
-    }
+    = default;
     /** This is called during the substitution job from the
      * substitution method of the new atoms. This says that the
      * new name, say "a_m3" is a substitution of old name "a"
@@ -131,12 +129,10 @@ namespace ogp
     {
     }
     SAtoms(const SAtoms &sa)
-      : FineAtoms(sa)
-    {
-    }
+       
+    = default;
     virtual ~SAtoms()
-    {
-    }
+    = default;
     /** This substitutes all lags and leads for all exogenous and
      * all lags and leads greater than 1 for all endogenous
      * variables. This is useful for perfect foresight problems
diff --git a/dynare++/parser/cc/csv_parser.hh b/dynare++/parser/cc/csv_parser.hh
index 95b12354e995b8976fc7b14221c082b3bf400e29..f5970f2059c3fd335cc2439bbcaa6a03892b5e9d 100644
--- a/dynare++/parser/cc/csv_parser.hh
+++ b/dynare++/parser/cc/csv_parser.hh
@@ -12,8 +12,7 @@ namespace ogp
   {
   public:
     virtual ~CSVParserPeer()
-    {
-    }
+    = default;
     virtual void item(int irow, int icol, const char *str, int length) = 0;
   };
 
@@ -30,13 +29,10 @@ namespace ogp
     {
     }
     CSVParser(const CSVParser &csvp)
-      : peer(csvp.peer), row(csvp.row),
-        col(csvp.col), parsed_string(csvp.parsed_string)
-    {
-    }
+       
+    = default;
     virtual ~CSVParser()
-    {
-    }
+    = default;
 
     void csv_error(const char *mes);
     void csv_parse(int length, const char *str);
diff --git a/dynare++/parser/cc/dynamic_atoms.cc b/dynare++/parser/cc/dynamic_atoms.cc
index b604d9cda00f4bf7072688191a189df0ebc2144a..b7519d87df9c331323f9e6eddcaee9e49af6c567 100644
--- a/dynare++/parser/cc/dynamic_atoms.cc
+++ b/dynare++/parser/cc/dynamic_atoms.cc
@@ -133,8 +133,7 @@ Constants::print() const
 }
 
 DynamicAtoms::DynamicAtoms()
-{
-}
+= default;
 
 DynamicAtoms::DynamicAtoms(const DynamicAtoms &da)
   : Constants(da),
diff --git a/dynare++/parser/cc/dynamic_atoms.hh b/dynare++/parser/cc/dynamic_atoms.hh
index af9d2979b285ce6ae0ca22a9d2d5fb6b457b871b..05341f352480ab52835fe24716f1c28a9dd6724d 100644
--- a/dynare++/parser/cc/dynamic_atoms.hh
+++ b/dynare++/parser/cc/dynamic_atoms.hh
@@ -46,8 +46,7 @@ namespace ogp
     set<const char *, ltstr> name_set;
   public:
     NameStorage()
-    {
-    }
+    = default;
     NameStorage(const NameStorage &stor);
     virtual
     ~NameStorage();
@@ -82,8 +81,7 @@ namespace ogp
     Tconstantmap cmap;
   public:
     Constants()
-    {
-    }
+    = default;
     /** Copy constructor. */
     Constants(const Constants &c)
       : cmap(c.cmap), cinvmap(c.cinvmap)
@@ -172,8 +170,7 @@ namespace ogp
     DynamicAtoms();
     DynamicAtoms(const DynamicAtoms &da);
     virtual ~DynamicAtoms()
-    {
-    }
+    = default;
     /** Check the nulary term identified by its string
      * representation. The nulary term can be either a constant or
      * a variable. If constant, -1 is returned so that it could be
@@ -364,8 +361,7 @@ namespace ogp
                                const DynamicAtoms &a) const = 0;
     /** Destructor does nothing here. */
     virtual ~VarOrdering()
-    {
-    }
+    = default;
     /** This is the method setting the ordering and the map. A
      * subclass must reimplement it, possibly using a
      * preimplemented ordering. This method must be called by the
diff --git a/dynare++/parser/cc/formula_parser.cc b/dynare++/parser/cc/formula_parser.cc
index 87e6293dd5626fa87c925a4605866603827136ad..28cda7527968c9ea659214184cd99f228a12c218 100644
--- a/dynare++/parser/cc/formula_parser.cc
+++ b/dynare++/parser/cc/formula_parser.cc
@@ -258,10 +258,8 @@ FormulaDerivatives::FormulaDerivatives(OperationTree &otree,
 }
 
 FormulaDerivatives::FormulaDerivatives(const FormulaDerivatives &fd)
-  : tder(fd.tder), indices(fd.indices), ind2der(fd.ind2der),
-    nvar(fd.nvar), order(fd.order)
-{
-}
+   
+= default;
 
 int
 FormulaDerivatives::derivative(const FoldMultiIndex &mi) const
diff --git a/dynare++/parser/cc/formula_parser.hh b/dynare++/parser/cc/formula_parser.hh
index cbbefc6aa1acafdd1f3ca30300048ce988aa9fb9..e34f979803eba5ee53f6720f45e62004fe2566d3 100644
--- a/dynare++/parser/cc/formula_parser.hh
+++ b/dynare++/parser/cc/formula_parser.hh
@@ -17,11 +17,9 @@ namespace ogp
   {
   public:
     Atoms()
-    {
-    }
+    = default;
     virtual ~Atoms()
-    {
-    }
+    = default;
     /** This returns previously assigned internal index to the
      * given atom, or returns -1 if the atom has not been assigned
      * yet. The method can raise an exception, if the Atoms
@@ -51,8 +49,7 @@ namespace ogp
   {
   public:
     virtual ~AtomValues()
-    {
-    }
+    = default;
     virtual void setValues(EvalTree &et) const = 0;
   };
 
@@ -114,8 +111,7 @@ namespace ogp
     /** Copy constructor. */
     FormulaDerivatives(const FormulaDerivatives &fd);
     virtual ~FormulaDerivatives()
-    {
-    }
+    = default;
     /** Random access to the derivatives via multiindex. */
     int derivative(const FoldMultiIndex &mi) const;
     /** Return the order. */
@@ -314,8 +310,7 @@ namespace ogp
   {
   public:
     virtual ~FormulaEvalLoader()
-    {
-    }
+    = default;
     /** Set the value res for the given formula. The formula is
      * identified by an index corresponding to the ordering in
      * which the formulas have been parsed (starting from
@@ -376,8 +371,7 @@ namespace ogp
   {
   public:
     virtual ~FormulaDerEvalLoader()
-    {
-    }
+    = default;
     /** This loads the result of the derivative of the given
      * order. The semantics of i is the same as in
      * FormulaEvalLoader::load. The indices of variables with
diff --git a/dynare++/parser/cc/location.hh b/dynare++/parser/cc/location.hh
index e9ed6481451a5c6753eb8a860a1ff1d6c3cbf97f..c9d3f79d023442f77e49d9b40b1d9e6e40ea3584 100644
--- a/dynare++/parser/cc/location.hh
+++ b/dynare++/parser/cc/location.hh
@@ -26,8 +26,7 @@ namespace ogp
     int off{0}; // offset of the token
     int ll{0}; // length ot the token
     location_type()  
-    {
-    }
+    = default;
   };
 
 };
diff --git a/dynare++/parser/cc/matrix_parser.hh b/dynare++/parser/cc/matrix_parser.hh
index 188771252d0ae11c451bb41d837af08755b4ea98..88d41b65511ae108f2a8fe2e510f3461c67eed6d 100644
--- a/dynare++/parser/cc/matrix_parser.hh
+++ b/dynare++/parser/cc/matrix_parser.hh
@@ -35,15 +35,12 @@ namespace ogp
   public:
     MatrixParser()
        
-    {
-    }
+    = default;
     MatrixParser(const MatrixParser &mp)
-      : data(mp.data), row_lengths(mp.row_lengths), nc(mp.nc)
-    {
-    }
+       
+    = default;
     virtual ~MatrixParser()
-    {
-    }
+    = default;
     /** Return a number of read rows. */
     int
     nrows() const
@@ -122,11 +119,9 @@ namespace ogp
       return c;
     }
     /** Assignment operator. */
-    const MPIterator &
+    MPIterator &
     operator=(const MPIterator &it)
-    {
-      p = it.p; i = it.i; c = it.c; r = it.r; return *this;
-    }
+    = default;
     /** Return true if the iterators are the same, this is if they
      * have the same underlying object and the same item index. */
     bool
diff --git a/dynare++/parser/cc/namelist.hh b/dynare++/parser/cc/namelist.hh
index e704c8f677b785f138ab872366f480f3d2e987e6..8e8e2ef1979eb35bffd022f65c3e620233153ed8 100644
--- a/dynare++/parser/cc/namelist.hh
+++ b/dynare++/parser/cc/namelist.hh
@@ -21,8 +21,7 @@ namespace ogp
   {
   public:
     virtual ~NameListParser()
-    {
-    }
+    = default;
     virtual void add_name(const char *name) = 0;
     virtual void namelist_error(const char *mes) = 0;
     void namelist_parse(int length, const char *text);
diff --git a/dynare++/parser/cc/static_atoms.hh b/dynare++/parser/cc/static_atoms.hh
index cb362dea1caf33c323066790397412c7b95b3129..83135abf7dfbe16d613e4ebb68dc409a642e6f0e 100644
--- a/dynare++/parser/cc/static_atoms.hh
+++ b/dynare++/parser/cc/static_atoms.hh
@@ -43,8 +43,7 @@ namespace ogp
     }
     /* Destructor. */
     virtual ~StaticAtoms()
-    {
-    }
+    = default;
     /** This imports atoms from dynamic atoms inserting the new
      * tree indices to the given tree (including constants). The
      * mapping from old atoms to new atoms is traced in tmap. */
diff --git a/dynare++/parser/cc/static_fine_atoms.hh b/dynare++/parser/cc/static_fine_atoms.hh
index 7d2758ea20363e6315a9eb24cebfbebb45bfbb15..026b405f6eef974331fb87df88190b77fc9ccaf1 100644
--- a/dynare++/parser/cc/static_fine_atoms.hh
+++ b/dynare++/parser/cc/static_fine_atoms.hh
@@ -62,8 +62,7 @@ namespace ogp
     vector<int> exo_atoms_map;
   public:
     StaticFineAtoms()
-    {
-    }
+    = default;
     /** Copy constructor making a new storage for atom names. */
     StaticFineAtoms(const StaticFineAtoms &sfa);
     /** Conversion from dynamic FineAtoms taking its outer
@@ -86,8 +85,7 @@ namespace ogp
       StaticFineAtoms::import_atoms(fa, otree, tmap, dummy);
     }
     virtual ~StaticFineAtoms()
-    {
-    }
+    = default;
     /** This adds atoms from dynamic atoms inserting new tree
      * indices to the given tree and tracing the mapping from old
      * atoms to new atoms in tmap. The ordering of the static
diff --git a/dynare++/parser/cc/tree.hh b/dynare++/parser/cc/tree.hh
index 075b537e34226d11c1dd69389d00b70c498ae66e..d81e29f7a15894a398311e67cca800ff1e1f0e4d 100644
--- a/dynare++/parser/cc/tree.hh
+++ b/dynare++/parser/cc/tree.hh
@@ -52,23 +52,16 @@ namespace ogp
     /** Constructs a nulary operation. */
     Operation()
        
-    {
-    }
+    = default;
     /** A copy constructor. */
     Operation(const Operation &op)
-      : code(op.code), op1(op.op1), op2(op.op2)
-    {
-    }
+       
+    = default;
 
     /** Operator =. */
-    const Operation &
+    Operation &
     operator=(const Operation &op)
-    {
-      code = op.code;
-      op1 = op.op1;
-      op2 = op.op2;
-      return *this;
-    }
+    = default;
     /** Operator ==. */
     bool
     operator==(const Operation &op) const
@@ -141,8 +134,7 @@ namespace ogp
   {
     virtual bool operator()(int t) const = 0;
     virtual ~opselector()
-    {
-    }
+    = default;
   };
 
   /** Forward declaration of OperationFormatter. */
@@ -229,11 +221,9 @@ namespace ogp
 
     /** Copy constructor. */
     OperationTree(const OperationTree &ot)
-      : terms(ot.terms), opmap(ot.opmap), nul_incidence(ot.nul_incidence),
-        derivatives(ot.derivatives),
-        last_nulary(ot.last_nulary)
-    {
-    }
+      
+        
+    = default;
 
     /** Add a nulary operation. The caller is responsible for not
      * inserting two semantically equivalent nulary operations.
@@ -443,8 +433,7 @@ namespace ogp
   public:
     /** Empty virtual destructor. */
     virtual ~OperationFormatter()
-    {
-    }
+    = default;
     /** Print the formatted operation op with a given tree index t
      * to a given descriptor. (See class OperationTree to know
      * what is a tree index.) This prints all the tree. This
@@ -488,8 +477,7 @@ namespace ogp
   {
   public:
     virtual ~NularyStringConvertor()
-    {
-    }
+    = default;
     /** Return the string representation of the atom with the tree
      * index t. */
     virtual std::string convert(int t) const = 0;
@@ -508,8 +496,7 @@ namespace ogp
     }
     /** Empty virtual destructor. */
     virtual ~OperationStringConvertor()
-    {
-    }
+    = default;
     /** Convert the operation to the string mathematical
      * representation. This does not write any equation, just
      * returns a string representation of the formula. */
diff --git a/dynare++/src/dynare3.hh b/dynare++/src/dynare3.hh
index 04eea833ed0459d2b7a7675ed2a36e862f33d57d..92b99e68aadb428c295a3feb82175acafe8e4885 100644
--- a/dynare++/src/dynare3.hh
+++ b/dynare++/src/dynare3.hh
@@ -269,8 +269,7 @@ protected:
 public:
   DynareJacobian(Dynare &dyn);
   virtual ~DynareJacobian()
-  {
-  }
+  = default;
   void load(int i, int iord, const int *vars, double res);
   void eval(const Vector &in);
 };
@@ -285,8 +284,7 @@ public:
   {
   }
   virtual ~DynareVectorFunction()
-  {
-  }
+  = default;
   int
   inDim() const
   {
diff --git a/dynare++/src/dynare_atoms.hh b/dynare++/src/dynare_atoms.hh
index d43b56a4578f53f9e1d914c81a84252524ccd18e..212bd99ae20d1335f5e7034c398ce96d8ff2360c 100644
--- a/dynare++/src/dynare_atoms.hh
+++ b/dynare++/src/dynare_atoms.hh
@@ -34,12 +34,10 @@ namespace ogdyn
     {
     }
     DynareStaticAtoms(const DynareStaticAtoms &a)
-      : StaticAtoms(a)
-    {
-    }
+       
+    = default;
     virtual ~DynareStaticAtoms()
-    {
-    }
+    = default;
     /** This registers a unique varname identifier. It throws an
      * exception if the variable name is duplicate. It checks the
      * uniqueness and then it calls StaticAtoms::register_name. */
@@ -66,8 +64,7 @@ namespace ogdyn
     }
     DynareDynamicAtoms(const DynareDynamicAtoms &dda);
     virtual ~DynareDynamicAtoms()
-    {
-    }
+    = default;
     /** This parses a variable of the forms: varname(+3),
      * varname(3), varname, varname(-3), varname(0), varname(+0),
      * varname(-0). */
diff --git a/dynare++/src/dynare_model.cc b/dynare++/src/dynare_model.cc
index f832b41aef016a03f75f36b32ec4d2ff852c70d7..84fa6c2a1ab8ca9a5a86831b890b20fa446394d7 100644
--- a/dynare++/src/dynare_model.cc
+++ b/dynare++/src/dynare_model.cc
@@ -525,8 +525,7 @@ DynareParser::DynareParser(const DynareParser &dp)
 }
 
 DynareParser::~DynareParser()
-{
-}
+= default;
 
 void
 DynareParser::add_name(const char *name, int flag)
diff --git a/dynare++/src/dynare_model.hh b/dynare++/src/dynare_model.hh
index 49479ae8ca57085d3452419641b63c1c7c7e2820..e0b0ed9a9be5ea14e6d37a4b8ca22a65a1c9c6fc 100644
--- a/dynare++/src/dynare_model.hh
+++ b/dynare++/src/dynare_model.hh
@@ -31,17 +31,14 @@ namespace ogdyn
     int ll;
     int lc;
     PosInterval()
-    {
-    }
+    = default;
     PosInterval(int ifl, int ifc, int ill, int ilc)
       : fl(ifl), fc(ifc), ll(ill), lc(ilc)
     {
     }
-    const PosInterval &
+    PosInterval &
     operator=(const PosInterval &pi)
-    {
-      fl = pi.fl; fc = pi.fc; ll = pi.ll; lc = pi.lc; return *this;
-    }
+    = default;
     /** This returns the interval beginning and interval length
      * within the given string. */
     void translate(const char *beg, int len, const char * &ibeg, int &ilen) const;
@@ -364,12 +361,10 @@ namespace ogdyn
                   const char **par, int num_par,
                   const char *equations, int len, int ord);
     DynareSPModel(const DynareSPModel &dm)
-      : DynareModel(dm)
-    {
-    }
+       
+    = default;
     ~DynareSPModel()
-    {
-    }
+    = default;
     virtual DynareModel *
     clone() const
     {
diff --git a/dynare++/src/forw_subst_builder.hh b/dynare++/src/forw_subst_builder.hh
index a1782f441e1afaddc6cf00d508fd73c567daa63e..1b4b7b532051ad249b92a9ce392cb898ddc58098 100644
--- a/dynare++/src/forw_subst_builder.hh
+++ b/dynare++/src/forw_subst_builder.hh
@@ -21,8 +21,7 @@ namespace ogdyn
     ForwSubstInfo()
       
         
-    {
-    }
+    = default;
   };
 
   class ForwSubstBuilder
diff --git a/dynare++/src/nlsolve.hh b/dynare++/src/nlsolve.hh
index c4b50f56ed15f1216934d98373ab768959be5962..aa8727105030a3a81d92692a91ed475ed5d4ce66 100644
--- a/dynare++/src/nlsolve.hh
+++ b/dynare++/src/nlsolve.hh
@@ -15,8 +15,7 @@ namespace ogu
   {
   public:
     virtual ~OneDFunction()
-    {
-    }
+    = default;
     virtual double eval(double) = 0;
   };
 
@@ -47,11 +46,9 @@ namespace ogu
   {
   public:
     VectorFunction()
-    {
-    }
+    = default;
     virtual ~VectorFunction()
-    {
-    }
+    = default;
     virtual int inDim() const = 0;
     virtual int outDim() const = 0;
     /** Check dimensions of eval parameters. */
@@ -68,8 +65,7 @@ namespace ogu
     {
     }
     virtual ~Jacobian()
-    {
-    }
+    = default;
     virtual void eval(const Vector &in) = 0;
   };
 
@@ -93,8 +89,7 @@ namespace ogu
       xnewton.zeros(); xcauchy.zeros(); x.zeros();
     }
     virtual ~NLSolver()
-    {
-    }
+    = default;
     /** Returns true if the problem has converged. xx as input is the
      * starting value, as output it is a solution. */
     bool solve(Vector &xx, int &iter);
diff --git a/dynare++/src/planner_builder.hh b/dynare++/src/planner_builder.hh
index ec7da3b983ac62170441bb0458c88ca00e99bc77..e1e08c6690b7c7a4aecdfcd16038c0332d2a969e 100644
--- a/dynare++/src/planner_builder.hh
+++ b/dynare++/src/planner_builder.hh
@@ -131,8 +131,7 @@ namespace ogdyn
     PlannerInfo()
       
         
-    {
-    }
+    = default;
   };
 
   class MultInitSS;
diff --git a/dynare++/sylv/cc/GeneralMatrix.cc b/dynare++/sylv/cc/GeneralMatrix.cc
index 9fb2b09fced999ea01577d4e8b0ce10c119c5bc5..2c40db05384f8322e2286e562984e2705829abee 100644
--- a/dynare++/sylv/cc/GeneralMatrix.cc
+++ b/dynare++/sylv/cc/GeneralMatrix.cc
@@ -81,8 +81,7 @@ GeneralMatrix::GeneralMatrix(const GeneralMatrix &a, const char *dum1,
 }
 
 GeneralMatrix::~GeneralMatrix()
-{
-}
+= default;
 
 void
 GeneralMatrix::place(const ConstGeneralMatrix &m, int i, int j)
diff --git a/dynare++/sylv/cc/GeneralMatrix.hh b/dynare++/sylv/cc/GeneralMatrix.hh
index b85dbb4da9e169442756d04addc1ce8d5600296a..0660e1ea297f7eef54e3e77d3c724349fcf0d44e 100644
--- a/dynare++/sylv/cc/GeneralMatrix.hh
+++ b/dynare++/sylv/cc/GeneralMatrix.hh
@@ -28,8 +28,7 @@ public:
   ConstGeneralMatrix(const GeneralMatrix &m, int i, int j, int nrows, int ncols);
   ConstGeneralMatrix(const ConstGeneralMatrix &m, int i, int j, int nrows, int ncols);
   virtual ~ConstGeneralMatrix()
-  {
-  }
+  = default;
 
   const double &
   get(int i, int j) const
@@ -149,11 +148,9 @@ public:
 
   virtual
   ~GeneralMatrix();
-  const GeneralMatrix &
+  GeneralMatrix &
   operator=(const GeneralMatrix &m)
-  {
-    data = m.data; rows = m.rows; cols = m.cols; ld = m.ld; return *this;
-  }
+  = default;
 
   const double &
   get(int i, int j) const
diff --git a/dynare++/sylv/cc/KronVector.hh b/dynare++/sylv/cc/KronVector.hh
index 9ff6f2a3c536926125aa8637e3d97c38709860d0..27b95744664c3771838265b4e9c464802abbc9bc 100644
--- a/dynare++/sylv/cc/KronVector.hh
+++ b/dynare++/sylv/cc/KronVector.hh
@@ -23,16 +23,9 @@ public:
   KronVector(Vector &v, int mm, int nn, int dp); // conversion
   KronVector(KronVector &, int i); // picks i-th subvector
   KronVector(const ConstKronVector &v); // new instance and copy
-  const KronVector &
-  operator=(KronVector &v)
-  {
-    Vector::operator=(v); m = v.m; n = v.n; depth = v.depth; return *this;
-  }
-  const KronVector &
+  KronVector &
   operator=(const KronVector &v)
-  {
-    Vector::operator=(v); m = v.m; n = v.n; depth = v.depth; return *this;
-  }
+  = default;
   const KronVector &operator=(const ConstKronVector &v);
   const KronVector &operator=(const Vector &v);
   int
diff --git a/dynare++/sylv/cc/QuasiTriangular.cc b/dynare++/sylv/cc/QuasiTriangular.cc
index 5496de63f772d2ca237dac59aed9beab035c668d..5b70818b553501d9f764766b2c15fedc458ee9a2 100644
--- a/dynare++/sylv/cc/QuasiTriangular.cc
+++ b/dynare++/sylv/cc/QuasiTriangular.cc
@@ -432,8 +432,7 @@ QuasiTriangular::QuasiTriangular(const double *d, int d_size)
 }
 
 QuasiTriangular::~QuasiTriangular()
-{
-}
+= default;
 
 QuasiTriangular::QuasiTriangular(int p, const QuasiTriangular &t)
   : SqSylvMatrix(t.numRows()), diagonal(getData().base(), t.diagonal)
diff --git a/dynare++/sylv/cc/QuasiTriangular.hh b/dynare++/sylv/cc/QuasiTriangular.hh
index 0447f16d5714387d70359d94b016ba8ef22aed6c..87378483f2915547b356149a553ef74aa0270b0f 100644
--- a/dynare++/sylv/cc/QuasiTriangular.hh
+++ b/dynare++/sylv/cc/QuasiTriangular.hh
@@ -22,8 +22,7 @@ private:
   double *a2;
 public:
   DiagPair()
-  {
-  }
+  = default;
   DiagPair(double *aa1, double *aa2)
   {
     a1 = aa1; a2 = aa2;
@@ -32,12 +31,10 @@ public:
   {
     a1 = p.a1; a2 = p.a2;
   }
-  const DiagPair &
+  DiagPair &
   operator=(const DiagPair &p)
-  {
-    a1 = p.a1; a2 = p.a2; return *this;
-  }
-  const DiagPair &
+  = default;
+  DiagPair &
   operator=(double v)
   {
     *a1 = v; *a2 = v; return *this;
@@ -74,8 +71,7 @@ private:
 
 public:
   DiagonalBlock()
-  {
-  }
+  = default;
   DiagonalBlock(int jb, bool r, double *a1, double *a2,
                 double *b1, double *b2)
     : alpha(a1, a2)
@@ -210,8 +206,7 @@ private:
   void copy(const Diagonal &);
 public:
   Diagonal()  
-  {
-  }
+  = default;
   Diagonal(double *data, int d_size);
   Diagonal(double *data, const Diagonal &d);
   Diagonal(const Diagonal &d)
@@ -224,8 +219,7 @@ public:
     copy(d); return *this;
   }
   virtual ~Diagonal()
-  {
-  }
+  = default;
 
   int
   getNumComplex() const
@@ -297,8 +291,7 @@ public:
     ptr = base; d_size = ds; real = r;
   }
   virtual ~_matrix_iter()
-  {
-  }
+  = default;
   const _Self &
   operator=(const _Self &it)
   {
diff --git a/dynare++/sylv/cc/QuasiTriangularZero.cc b/dynare++/sylv/cc/QuasiTriangularZero.cc
index 737736b30cb101e945da643be48f767bd7e4d875..37bd9ff24e20ce0f722c73216d05592c1494ff85 100644
--- a/dynare++/sylv/cc/QuasiTriangularZero.cc
+++ b/dynare++/sylv/cc/QuasiTriangularZero.cc
@@ -63,8 +63,7 @@ QuasiTriangularZero::QuasiTriangularZero(const QuasiTriangular &t)
 }
 
 QuasiTriangularZero::~QuasiTriangularZero()
-{
-}
+= default;
 
 void
 QuasiTriangularZero::solvePre(Vector &x, double &eig_min)
diff --git a/dynare++/sylv/cc/SylvMatrix.hh b/dynare++/sylv/cc/SylvMatrix.hh
index 9c6b3ea0cc73ada92f76882a2c71bfb69b2c3e29..8d68208510efb45f28a5ade6be7f23745d81e1f9 100644
--- a/dynare++/sylv/cc/SylvMatrix.hh
+++ b/dynare++/sylv/cc/SylvMatrix.hh
@@ -74,9 +74,8 @@ public:
   SqSylvMatrix(double *d, int m) : SylvMatrix(d, m, m)
   {
   }
-  SqSylvMatrix(const SqSylvMatrix &m) : SylvMatrix(m)
-  {
-  }
+  SqSylvMatrix(const SqSylvMatrix &m)  
+  = default;
   SqSylvMatrix(const GeneralMatrix &m, int i, int j, int nrows)
     : SylvMatrix(m, i, j, nrows, nrows)
   {
diff --git a/dynare++/sylv/cc/SylvMemory.cc b/dynare++/sylv/cc/SylvMemory.cc
index f0d4f69e1868bdddb9ec5034c1fe9b696b8f5eba..145a3339c7290593f7e9463b2557c0e59fe78ac6 100644
--- a/dynare++/sylv/cc/SylvMemory.cc
+++ b/dynare++/sylv/cc/SylvMemory.cc
@@ -22,8 +22,7 @@ SylvMemoryPool memory_pool;
 
 SylvMemoryPool::SylvMemoryPool()
    
-{
-}
+= default;
 
 void
 SylvMemoryPool::init(size_t size)
diff --git a/dynare++/sylv/cc/SylvParams.hh b/dynare++/sylv/cc/SylvParams.hh
index 9b58e92e58118e63bf777b94d16f0fb0ed0bebe7..bb34f27ab622695fadbb55b0cf27b4d6a2e064cd 100644
--- a/dynare++/sylv/cc/SylvParams.hh
+++ b/dynare++/sylv/cc/SylvParams.hh
@@ -86,9 +86,8 @@ protected:
     DoubleParamItem(double val) : ParamItem<double>(val)
     {
     }
-    DoubleParamItem(const DoubleParamItem &item) : ParamItem<double>(item)
-    {
-    }
+    DoubleParamItem(const DoubleParamItem &item)  
+    = default;
     const DoubleParamItem &
     operator=(const double &val)
     {
@@ -108,9 +107,8 @@ protected:
     IntParamItem(int val) : ParamItem<int>(val)
     {
     }
-    IntParamItem(const IntParamItem &item) : ParamItem<int>(item)
-    {
-    }
+    IntParamItem(const IntParamItem &item)  
+    = default;
     const IntParamItem &
     operator=(const int &val)
     {
@@ -130,9 +128,8 @@ protected:
     BoolParamItem(bool val) : ParamItem<bool>(val)
     {
     }
-    BoolParamItem(const BoolParamItem &item) : ParamItem<bool>(item)
-    {
-    }
+    BoolParamItem(const BoolParamItem &item)  
+    = default;
     const BoolParamItem &
     operator=(const bool &val)
     {
@@ -152,9 +149,8 @@ protected:
     MethodParamItem(solve_method val) : ParamItem<solve_method>(val)
     {
     }
-    MethodParamItem(const MethodParamItem &item) : ParamItem<solve_method>(item)
-    {
-    }
+    MethodParamItem(const MethodParamItem &item)  
+    = default;
     const MethodParamItem
     operator=(const solve_method &val)
     {
@@ -212,8 +208,7 @@ public:
     copy(p); return *this;
   }
   ~SylvParams()
-  {
-  }
+  = default;
   void print(const char *prefix) const;
   void print(FILE *fdesc, const char *prefix) const;
   void setArrayNames(int &num, const char **names) const;
diff --git a/dynare++/sylv/cc/SymSchurDecomp.hh b/dynare++/sylv/cc/SymSchurDecomp.hh
index 4ce35b4c477c695f033930471095ab26396b7726..ba2e8bd6b5c680540f86b32f5c77ae62211f1e81 100644
--- a/dynare++/sylv/cc/SymSchurDecomp.hh
+++ b/dynare++/sylv/cc/SymSchurDecomp.hh
@@ -17,12 +17,10 @@ public:
    * symmetric and Lambda real diagonal, hence a vector. */
   SymSchurDecomp(const GeneralMatrix &a);
   SymSchurDecomp(const SymSchurDecomp &ssd)
-    : lambda(ssd.lambda), q(ssd.q)
-  {
-  }
+     
+  = default;
   virtual ~SymSchurDecomp()
-  {
-  }
+  = default;
   const Vector &
   getLambda() const
   {
diff --git a/dynare++/sylv/cc/Vector.hh b/dynare++/sylv/cc/Vector.hh
index 30d0ce52e3029d30e66cbdecb70c8d4b94330abb..4f79ca4a8177e0e942799efcd18f07309c76dd64 100644
--- a/dynare++/sylv/cc/Vector.hh
+++ b/dynare++/sylv/cc/Vector.hh
@@ -23,8 +23,7 @@ protected:
   bool destroy{false};
 public:
   Vector()  
-  {
-  }
+  = default;
   Vector(int l) : len(l),  data(new double[l]), destroy(true)
   {
   }
@@ -150,14 +149,11 @@ public:
   BaseConstVector(int l, int si, const double *d) : len(l), s(si), data(d)
   {
   }
-  BaseConstVector(const BaseConstVector &v) : len(v.len), s(v.s), data(v.data)
-  {
-  }
-  const BaseConstVector &
+  BaseConstVector(const BaseConstVector &v)  
+  = default;
+  BaseConstVector &
   operator=(const BaseConstVector &v)
-  {
-    len = v.len; s = v.s; data = v.data; return *this;
-  }
+  = default;
   const double &
   operator[](int i) const
   {
@@ -188,9 +184,8 @@ public:
   ConstVector(const Vector &v) : BaseConstVector(v.length(), v.skip(), v.base())
   {
   }
-  ConstVector(const ConstVector &v) : BaseConstVector(v)
-  {
-  }
+  ConstVector(const ConstVector &v)  
+  = default;
   ConstVector(const double *d, int l) : BaseConstVector(l, 1, d)
   {
   }
@@ -201,8 +196,7 @@ public:
   ConstVector(int row, const ConstGeneralMatrix &m);
 
   virtual ~ConstVector()
-  {
-  }
+  = default;
   /** Exact equality. */
   bool operator==(const ConstVector &y) const;
   bool
diff --git a/dynare++/tl/cc/equivalence.cc b/dynare++/tl/cc/equivalence.cc
index e79d9b20da755873d8d5864f0aab04d6ee9eab63..85d1a9fa6080f9474b8797c156d4454ba50333dd 100644
--- a/dynare++/tl/cc/equivalence.cc
+++ b/dynare++/tl/cc/equivalence.cc
@@ -124,10 +124,9 @@ Equivalence::Equivalence(int num, const char *dummy)
 /* Copy constructors. The second also glues a given couple. */
 
 Equivalence::Equivalence(const Equivalence &e)
-  : n(e.n),
-    classes(e.classes)
-{
-}
+  
+    
+= default;
 
 Equivalence::Equivalence(const Equivalence &e, int i1, int i2)
   : n(e.n),
diff --git a/dynare++/tl/cc/equivalence.hh b/dynare++/tl/cc/equivalence.hh
index 8b9ee754c027027352c91053b3583066219b227d..1ed2653789bec16c6f0724bf04bda221c6503018 100644
--- a/dynare++/tl/cc/equivalence.hh
+++ b/dynare++/tl/cc/equivalence.hh
@@ -60,14 +60,11 @@ public:
   OrdSequence() : data()
   {
   }
-  OrdSequence(const OrdSequence &s) : data(s.data)
-  {
-  }
-  const OrdSequence &
+  OrdSequence(const OrdSequence &s)  
+  = default;
+  OrdSequence &
   operator=(const OrdSequence &s)
-  {
-    data = s.data; return *this;
-  }
+  = default;
   bool operator==(const OrdSequence &s) const;
   int operator[](int i) const;
   bool operator<(const OrdSequence &s) const;
diff --git a/dynare++/tl/cc/fs_tensor.hh b/dynare++/tl/cc/fs_tensor.hh
index 2890cc02beee0258986f1915e91a1efa0f004b02..f0635eecca9a3e22652c8470ce780b4b3f9de479 100644
--- a/dynare++/tl/cc/fs_tensor.hh
+++ b/dynare++/tl/cc/fs_tensor.hh
@@ -59,9 +59,8 @@ public:
   FFSTensor(const FFSTensor &t, const ConstVector &x);
   FFSTensor(const FSSparseTensor &t);
   FFSTensor(const FFSTensor &ft)
-    : FTensor(ft), nv(ft.nv)
-  {
-  }
+     
+  = default;
   FFSTensor(const UFSTensor &ut);
   FFSTensor(int first_row, int num, FFSTensor &t)
     : FTensor(first_row, num, t), nv(t.nv)
@@ -104,9 +103,8 @@ public:
   }
   UFSTensor(const UFSTensor &t, const ConstVector &x);
   UFSTensor(const UFSTensor &ut)
-    : UTensor(ut), nv(ut.nv)
-  {
-  }
+     
+  = default;
   UFSTensor(const FFSTensor &ft);
   UFSTensor(int first_row, int num, UFSTensor &t)
     : UTensor(first_row, num, t), nv(t.nv)
diff --git a/dynare++/tl/cc/gs_tensor.hh b/dynare++/tl/cc/gs_tensor.hh
index 422b566bba43b90cd84d49a9392696f785ae848a..8fe53cb8ccb7cc6adadc10331016b1db5d189865 100644
--- a/dynare++/tl/cc/gs_tensor.hh
+++ b/dynare++/tl/cc/gs_tensor.hh
@@ -69,18 +69,14 @@ public:
     nvs[0] = nvar;
   }
   TensorDimens(const TensorDimens &td)
-    : nvs(td.nvs), sym(td.sym), nvmax(td.nvmax)
-  {
-  }
+     
+  = default;
   virtual ~TensorDimens()
-  {
-  }
+  = default;
   TensorDimens(const IntSequence &ss, const IntSequence &coor);
-  const TensorDimens &
+  TensorDimens &
   operator=(const TensorDimens &td)
-  {
-    nvs = td.nvs; sym = td.sym; nvmax = td.nvmax; return *this;
-  }
+  = default;
   bool
   operator==(const TensorDimens &td) const
   {
@@ -156,9 +152,8 @@ public:
   {
   }
   FGSTensor(const FGSTensor &ft)
-    : FTensor(ft), tdims(ft.tdims)
-  {
-  }
+     
+  = default;
   FGSTensor(const UGSTensor &ut);
   FGSTensor(int first_row, int num, FGSTensor &t)
     : FTensor(first_row, num, t), tdims(t.tdims)
@@ -175,8 +170,7 @@ public:
   }
 
   virtual ~FGSTensor()
-  {
-  }
+  = default;
 
   void increment(IntSequence &v) const;
   void
@@ -227,9 +221,8 @@ public:
   {
   }
   UGSTensor(const UGSTensor &ut)
-    : UTensor(ut), tdims(ut.tdims)
-  {
-  }
+     
+  = default;
   UGSTensor(const FGSTensor &ft);
 
   UGSTensor(int first_row, int num, UGSTensor &t)
@@ -245,8 +238,7 @@ public:
   {
   }
   virtual ~UGSTensor()
-  {
-  }
+  = default;
 
   void increment(IntSequence &v) const;
   void decrement(IntSequence &v) const;
diff --git a/dynare++/tl/cc/kron_prod.hh b/dynare++/tl/cc/kron_prod.hh
index 9203d482b0dde27312f243c316d29240ac8d3878..a787e5d012f01a175d011a8218b33fba9aa689d7 100644
--- a/dynare++/tl/cc/kron_prod.hh
+++ b/dynare++/tl/cc/kron_prod.hh
@@ -66,16 +66,13 @@ public:
   {
   }
   KronProdDimens(const KronProdDimens &kd)
-    : rows(kd.rows), cols(kd.cols)
-  {
-  }
+     
+  = default;
   KronProdDimens(const KronProdDimens &kd, int i);
 
-  const KronProdDimens &
+  KronProdDimens &
   operator=(const KronProdDimens &kd)
-  {
-    rows = kd.rows; cols = kd.cols; return *this;
-  }
+  = default;
   bool
   operator==(const KronProdDimens &kd) const
   {
@@ -149,12 +146,10 @@ public:
   {
   }
   KronProd(const KronProd &kp)
-    : kpd(kp.kpd)
-  {
-  }
+     
+  = default;
   virtual ~KronProd()
-  {
-  }
+  = default;
 
   int
   dimen() const
diff --git a/dynare++/tl/cc/permutation.hh b/dynare++/tl/cc/permutation.hh
index 64d151c32f8edacb55018fa3d8cdd9c6e9fa2d37..e6bcc3ac2a3d1693566c25cc8b7384b753bb51ef 100644
--- a/dynare++/tl/cc/permutation.hh
+++ b/dynare++/tl/cc/permutation.hh
@@ -77,9 +77,8 @@ public:
     computeSortingMap(s);
   };
   Permutation(const Permutation &p)
-    : permap(p.permap)
-  {
-  }
+     
+  = default;
   Permutation(const Permutation &p1, const Permutation &p2)
     : permap(p2.permap)
   {
@@ -89,11 +88,9 @@ public:
     : permap(p.size(), p.permap, i)
   {
   }
-  const Permutation &
+  Permutation &
   operator=(const Permutation &p)
-  {
-    permap = p.permap; return *this;
-  }
+  = default;
   bool
   operator==(const Permutation &p)
   {
diff --git a/dynare++/tl/cc/ps_tensor.hh b/dynare++/tl/cc/ps_tensor.hh
index 52ce91b56234be661b62045b57e121e09fb3b44f..eb6ec9063830ad9ddbffc173d5552c51ec65915f 100644
--- a/dynare++/tl/cc/ps_tensor.hh
+++ b/dynare++/tl/cc/ps_tensor.hh
@@ -109,14 +109,11 @@ public:
     per.apply(nvmax);
   }
   PerTensorDimens(const PerTensorDimens &td)
-    : TensorDimens(td), per(td.per)
-  {
-  }
-  const PerTensorDimens &
+     
+  = default;
+  PerTensorDimens &
   operator=(const PerTensorDimens &td)
-  {
-    TensorDimens::operator=(td); per = td.per; return *this;
-  }
+  = default;
   bool
   operator==(const PerTensorDimens &td)
   {
@@ -204,9 +201,8 @@ public:
   UPSTensor(const FSSparseTensor &t, const IntSequence &ss,
             const IntSequence &coor, const PerTensorDimens &ptd);
   UPSTensor(const UPSTensor &ut)
-    : UTensor(ut), tdims(ut.tdims)
-  {
-  }
+     
+  = default;
 
   void increment(IntSequence &v) const;
   void decrement(IntSequence &v) const;
@@ -369,9 +365,8 @@ public:
             const GSSparseTensor &t, const KronProdAll &kp);
 
   FPSTensor(const FPSTensor &ft)
-    : FTensor(ft), tdims(ft.tdims)
-  {
-  }
+     
+  = default;
 
   void increment(IntSequence &v) const;
   void decrement(IntSequence &v) const;
diff --git a/dynare++/tl/cc/rfs_tensor.hh b/dynare++/tl/cc/rfs_tensor.hh
index 219398f69dc2e40b92ec4951579620078f8ace84..c70bbd0de603f4f64fde28c6853f694c94091216 100644
--- a/dynare++/tl/cc/rfs_tensor.hh
+++ b/dynare++/tl/cc/rfs_tensor.hh
@@ -53,14 +53,12 @@ public:
   {
   }
   URTensor(const URTensor &ut)
-    : UTensor(ut), nv(ut.nv)
-  {
-  }
+     
+  = default;
   URTensor(const FRTensor &ft);
 
   virtual ~URTensor()
-  {
-  }
+  = default;
 
   void increment(IntSequence &v) const;
   void decrement(IntSequence &v) const;
@@ -91,14 +89,12 @@ public:
   {
   }
   FRTensor(const FRTensor &ft)
-    : FTensor(ft), nv(ft.nv)
-  {
-  }
+     
+  = default;
   FRTensor(const URTensor &ut);
 
   virtual ~FRTensor()
-  {
-  }
+  = default;
 
   void increment(IntSequence &v) const;
   void decrement(IntSequence &v) const;
@@ -138,12 +134,10 @@ public:
   URSingleTensor(const vector<ConstVector> &cols);
   URSingleTensor(const ConstVector &v, int d);
   URSingleTensor(const URSingleTensor &ut)
-    : URTensor(ut)
-  {
-  }
+     
+  = default;
   virtual ~URSingleTensor()
-  {
-  }
+  = default;
   FTensor&fold() const;
 };
 
@@ -162,12 +156,10 @@ public:
   }
   FRSingleTensor(const URSingleTensor &ut);
   FRSingleTensor(const FRSingleTensor &ft)
-    : FRTensor(ft)
-  {
-  }
+     
+  = default;
   virtual ~FRSingleTensor()
-  {
-  }
+  = default;
 };
 
 #endif
diff --git a/dynare++/tl/cc/sparse_tensor.hh b/dynare++/tl/cc/sparse_tensor.hh
index deceaace354c26b77ca400e080efc7baa9a172a9..0017106fd53bb88537d26da926245507622d052c 100644
--- a/dynare++/tl/cc/sparse_tensor.hh
+++ b/dynare++/tl/cc/sparse_tensor.hh
@@ -72,8 +72,7 @@ public:
   {
   }
   virtual ~SparseTensor()
-  {
-  }
+  = default;
   void insert(const IntSequence &s, int r, double c);
   const Map &
   getMap() const
@@ -166,9 +165,8 @@ public:
   GSSparseTensor(const FSSparseTensor &t, const IntSequence &ss,
                  const IntSequence &coor, const TensorDimens &td);
   GSSparseTensor(const GSSparseTensor &t)
-    : SparseTensor(t), tdims(t.tdims)
-  {
-  }
+     
+  = default;
   void insert(const IntSequence &s, int r, double c);
   const Symmetry &
   getSym() const
diff --git a/dynare++/tl/cc/stack_container.hh b/dynare++/tl/cc/stack_container.hh
index 9bc16e7908ba2413f3295ca7a9d71fd63f6cefb7..638b276c231aa7869d2676f22422fad2fbac2326 100644
--- a/dynare++/tl/cc/stack_container.hh
+++ b/dynare++/tl/cc/stack_container.hh
@@ -102,8 +102,7 @@ public:
   {
   }
   virtual ~StackContainerInterface()
-  {
-  }
+  = default;
   virtual const IntSequence&getStackSizes() const = 0;
   virtual IntSequence&getStackSizes() = 0;
   virtual const IntSequence&getStackOffsets() const = 0;
diff --git a/dynare++/tl/cc/sthread.hh b/dynare++/tl/cc/sthread.hh
index 085398a796d98ce1f2cf77cf5668e3703956e59a..c932d0ea02c5d4bd465496d3a0b2d9b074003d4b 100644
--- a/dynare++/tl/cc/sthread.hh
+++ b/dynare++/tl/cc/sthread.hh
@@ -107,8 +107,7 @@ namespace sthread
     _Tthread th;
   public:
     virtual ~thread()
-    {
-    }
+    = default;
     _Tthread &
     getThreadIden()
     {
diff --git a/dynare++/tl/cc/symmetry.hh b/dynare++/tl/cc/symmetry.hh
index ce615ef3084e07e908363e957f9bc7b8b41ff8a1..ea3ee57a7a6a6b28b27b203f3f0b8231370b6e88 100644
--- a/dynare++/tl/cc/symmetry.hh
+++ b/dynare++/tl/cc/symmetry.hh
@@ -93,9 +93,8 @@ public:
     operator[](3) = i4;
   }
   Symmetry(const Symmetry &s)
-    : IntSequence(s)
-  {
-  }
+     
+  = default;
   Symmetry(const Symmetry &s, const OrdSequence &cl)
     : IntSequence(s, cl.getData())
   {
diff --git a/dynare++/tl/cc/t_container.hh b/dynare++/tl/cc/t_container.hh
index a20e98c3e069703e91ee8804b8f2c9fbb51b576b..bf53841c320933b535d8951df6a1b9659f1951d4 100644
--- a/dynare++/tl/cc/t_container.hh
+++ b/dynare++/tl/cc/t_container.hh
@@ -343,9 +343,8 @@ public:
   {
   }
   UGSContainer(const UGSContainer &uc)
-    : TensorContainer<UGSTensor>(uc)
-  {
-  }
+     
+  = default;
   UGSContainer(const FGSContainer &c);
   void multAndAdd(const UGSTensor &t, UGSTensor &out) const;
 };
@@ -372,9 +371,8 @@ public:
   {
   }
   FGSContainer(const FGSContainer &fc)
-    : TensorContainer<FGSTensor>(fc)
-  {
-  }
+     
+  = default;
   FGSContainer(const UGSContainer &c);
   void multAndAdd(const FGSTensor &t, FGSTensor &out) const;
   void multAndAdd(const UGSTensor &t, FGSTensor &out) const;
diff --git a/dynare++/tl/cc/tensor.hh b/dynare++/tl/cc/tensor.hh
index 6828caaaafc3963bc7e631889cc39431e0653071..4f0c497e6a13f134e195dc3290854f5ed84d186e 100644
--- a/dynare++/tl/cc/tensor.hh
+++ b/dynare++/tl/cc/tensor.hh
@@ -198,8 +198,7 @@ public:
   {
   }
   virtual ~Tensor()
-  {
-  }
+  = default;
   virtual void increment(IntSequence &v) const = 0;
   virtual void decrement(IntSequence &v) const = 0;
   virtual int getOffset(const IntSequence &v) const = 0;
@@ -247,16 +246,14 @@ public:
   {
   }
   UTensor(const UTensor &ut)
-    : Tensor(ut)
-  {
-  }
+     
+  = default;
   UTensor(int first_row, int num, UTensor &t)
     : Tensor(first_row, num, t)
   {
   }
   virtual ~UTensor()
-  {
-  }
+  = default;
   virtual FTensor&fold() const = 0;
 
   static void increment(IntSequence &v, int nv);
@@ -284,16 +281,14 @@ public:
   {
   }
   FTensor(const FTensor &ft)
-    : Tensor(ft)
-  {
-  }
+     
+  = default;
   FTensor(int first_row, int num, FTensor &t)
     : Tensor(first_row, num, t)
   {
   }
   virtual ~FTensor()
-  {
-  }
+  = default;
   virtual UTensor&unfold() const = 0;
 
   static void decrement(IntSequence &v, int nv);
diff --git a/dynare++/tl/cc/tl_exception.hh b/dynare++/tl/cc/tl_exception.hh
index 7b01b140e24b01bcac5eda05c3b4b2681b4b4ae0..b95313f4e14f9fccd023993791581cf0d1c6a2b4 100644
--- a/dynare++/tl/cc/tl_exception.hh
+++ b/dynare++/tl/cc/tl_exception.hh
@@ -62,8 +62,7 @@ public:
     lnum = l;
   }
   virtual ~TLException()
-  {
-  }
+  = default;
   virtual void
   print() const
   {
diff --git a/dynare++/tl/cc/twod_matrix.hh b/dynare++/tl/cc/twod_matrix.hh
index 03b5b659b2751bf33c13d25c0c6490afd27b9e77..76c663123f9737a43b3ac2d64e4af36b5f53101f 100644
--- a/dynare++/tl/cc/twod_matrix.hh
+++ b/dynare++/tl/cc/twod_matrix.hh
@@ -43,8 +43,7 @@ public:
   {
   }
   virtual ~ConstTwoDMatrix()
-  {
-  }
+  = default;
 
   int
   nrows() const
@@ -117,8 +116,7 @@ public:
   {
   }
   virtual ~TwoDMatrix()
-  {
-  }
+  = default;
 
   int
   nrows() const
diff --git a/dynare++/tl/testing/monoms.hh b/dynare++/tl/testing/monoms.hh
index 3dc285cee08cd55a61cffde9e410e534e949fe4b..a531adaaccb106e68ca8cacfaa99e853cca31e9f 100644
--- a/dynare++/tl/testing/monoms.hh
+++ b/dynare++/tl/testing/monoms.hh
@@ -17,8 +17,7 @@ class IntGenerator
 public:
   IntGenerator()
      
-  {
-  }
+  = default;
   void init(int nf, int ny, int nv, int nw, int nu, int mx, double prob);
   int get() const;
 };
diff --git a/dynare++/utils/cc/exception.hh b/dynare++/utils/cc/exception.hh
index 97de4863e1b297791f2a0f3fda47d54b0e52e610..29d09f454723128cb57b761275a434588429edb5 100644
--- a/dynare++/utils/cc/exception.hh
+++ b/dynare++/utils/cc/exception.hh
@@ -41,8 +41,7 @@ namespace ogu
       mes[mes_length-1] = '\0';
     }
     virtual ~Exception()
-    {
-    }
+    = default;
     void
     print(FILE *fd) const
     {
diff --git a/dynare++/utils/cc/pascal_triangle.hh b/dynare++/utils/cc/pascal_triangle.hh
index 488e145712409054c65010cd9c64efc121678ee6..495a007bd610490510feeef934da0c96fd73025d 100644
--- a/dynare++/utils/cc/pascal_triangle.hh
+++ b/dynare++/utils/cc/pascal_triangle.hh
@@ -36,14 +36,11 @@ namespace ogu
       tr.emplace_back();
     }
     PascalTriangle(const PascalTriangle &triang)
-      : tr(triang.tr)
-    {
-    }
-    const PascalTriangle &
+       
+    = default;
+    PascalTriangle &
     operator=(const PascalTriangle &triang)
-    {
-      tr = triang.tr; return *this;
-    }
+    = default;
     int noverk(int n, int k);
     void print() const;
   protected: