From 197cbea919ade79482d1ad09fa973da2b3871bef Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org>
Date: Wed, 9 Jan 2019 16:16:29 +0100
Subject: [PATCH] Port to C++11 syntax for default constructors

Performed using modernize-use-equals-default from clang-tidy.

https://clang.llvm.org/extra/clang-tidy/checks/modernize-use-equals-default.html
---
 dynare++/integ/cc/product.hh             |  3 +-
 dynare++/integ/cc/quadrature.hh          |  9 ++----
 dynare++/integ/cc/quasi_mcarlo.hh        | 33 +++++++--------------
 dynare++/integ/cc/smolyak.hh             |  3 +-
 dynare++/integ/cc/vector_function.hh     |  8 ++---
 dynare++/integ/testing/tests.cc          | 15 ++++------
 dynare++/kord/decision_rule.hh           |  9 ++----
 dynare++/kord/dynamic_model.hh           |  6 ++--
 dynare++/kord/global_check.hh            |  8 ++---
 dynare++/kord/journal.hh                 |  3 +-
 dynare++/kord/kord_exception.hh          |  3 +-
 dynare++/kord/mersenne_twister.hh        |  3 +-
 dynare++/kord/normal_conjugate.cc        |  5 ++--
 dynare++/kord/normal_conjugate.hh        |  3 +-
 dynare++/parser/cc/atom_assignings.hh    |  6 ++--
 dynare++/parser/cc/atom_substitutions.hh | 14 ++++-----
 dynare++/parser/cc/csv_parser.hh         | 12 +++-----
 dynare++/parser/cc/dynamic_atoms.cc      |  3 +-
 dynare++/parser/cc/dynamic_atoms.hh      | 12 +++-----
 dynare++/parser/cc/formula_parser.cc     |  6 ++--
 dynare++/parser/cc/formula_parser.hh     | 18 ++++--------
 dynare++/parser/cc/location.hh           |  3 +-
 dynare++/parser/cc/matrix_parser.hh      | 17 ++++-------
 dynare++/parser/cc/namelist.hh           |  3 +-
 dynare++/parser/cc/static_atoms.hh       |  3 +-
 dynare++/parser/cc/static_fine_atoms.hh  |  6 ++--
 dynare++/parser/cc/tree.hh               | 37 ++++++++----------------
 dynare++/src/dynare3.hh                  |  6 ++--
 dynare++/src/dynare_atoms.hh             | 11 +++----
 dynare++/src/dynare_model.cc             |  3 +-
 dynare++/src/dynare_model.hh             | 17 ++++-------
 dynare++/src/forw_subst_builder.hh       |  3 +-
 dynare++/src/nlsolve.hh                  | 15 ++++------
 dynare++/src/planner_builder.hh          |  3 +-
 dynare++/sylv/cc/GeneralMatrix.cc        |  3 +-
 dynare++/sylv/cc/GeneralMatrix.hh        |  9 ++----
 dynare++/sylv/cc/KronVector.hh           | 11 ++-----
 dynare++/sylv/cc/QuasiTriangular.cc      |  3 +-
 dynare++/sylv/cc/QuasiTriangular.hh      | 23 +++++----------
 dynare++/sylv/cc/QuasiTriangularZero.cc  |  3 +-
 dynare++/sylv/cc/SylvMatrix.hh           |  5 ++--
 dynare++/sylv/cc/SylvMemory.cc           |  3 +-
 dynare++/sylv/cc/SylvParams.hh           | 23 ++++++---------
 dynare++/sylv/cc/SymSchurDecomp.hh       |  8 ++---
 dynare++/sylv/cc/Vector.hh               | 22 +++++---------
 dynare++/tl/cc/equivalence.cc            |  7 ++---
 dynare++/tl/cc/equivalence.hh            | 11 +++----
 dynare++/tl/cc/fs_tensor.hh              | 10 +++----
 dynare++/tl/cc/gs_tensor.hh              | 30 +++++++------------
 dynare++/tl/cc/kron_prod.hh              | 19 +++++-------
 dynare++/tl/cc/permutation.hh            | 11 +++----
 dynare++/tl/cc/ps_tensor.hh              | 21 +++++---------
 dynare++/tl/cc/rfs_tensor.hh             | 32 ++++++++------------
 dynare++/tl/cc/sparse_tensor.hh          |  8 ++---
 dynare++/tl/cc/stack_container.hh        |  3 +-
 dynare++/tl/cc/sthread.hh                |  3 +-
 dynare++/tl/cc/symmetry.hh               |  5 ++--
 dynare++/tl/cc/t_container.hh            | 10 +++----
 dynare++/tl/cc/tensor.hh                 | 19 +++++-------
 dynare++/tl/cc/tl_exception.hh           |  3 +-
 dynare++/tl/cc/twod_matrix.hh            |  6 ++--
 dynare++/tl/testing/monoms.hh            |  3 +-
 dynare++/utils/cc/exception.hh           |  3 +-
 dynare++/utils/cc/pascal_triangle.hh     | 11 +++----
 64 files changed, 225 insertions(+), 412 deletions(-)

diff --git a/dynare++/integ/cc/product.hh b/dynare++/integ/cc/product.hh
index 2265ee826..3ded7b2ac 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 8ae43f647..d68272c7b 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 5385b6886..189cb16d5 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 218d50a07..bef067b2e 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 bcef366af..74d1da377 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 76e2db514..97a0250a3 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 6f7757eb4..b15aeebf6 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 8cd11c1dd..b50977c50 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 ed1b1a1a6..7234bcff3 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 5890d7223..c3d40fcda 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 19833699d..24857ee40 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 f17151205..a76b58669 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 aed725bda..09534af36 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 8faed5e2d..d80d178c0 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 c4c253b1a..14e4b62d2 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 b46f88554..36f523bb0 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 95b12354e..f5970f205 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 b604d9cda..b7519d87d 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 af9d2979b..05341f352 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 87e6293dd..28cda7527 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 cbbefc6aa..e34f97980 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 e9ed64814..c9d3f79d0 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 188771252..88d41b655 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 e704c8f67..8e8e2ef19 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 cb362dea1..83135abf7 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 7d2758ea2..026b405f6 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 075b537e3..d81e29f7a 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 04eea833e..92b99e68a 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 d43b56a45..212bd99ae 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 f832b41ae..84fa6c2a1 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 49479ae8c..e0b0ed9a9 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 a1782f441..1b4b7b532 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 c4b50f56e..aa8727105 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 ec7da3b98..e1e08c669 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 9fb2b09fc..2c40db053 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 b85dbb4da..0660e1ea2 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 9ff6f2a3c..27b957446 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 5496de63f..5b70818b5 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 0447f16d5..87378483f 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 737736b30..37bd9ff24 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 9c6b3ea0c..8d6820851 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 f0d4f69e1..145a3339c 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 9b58e92e5..bb34f27ab 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 4ce35b4c4..ba2e8bd6b 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 30d0ce52e..4f79ca4a8 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 e79d9b20d..85d1a9fa6 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 8b9ee754c..1ed265378 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 2890cc02b..f0635eecc 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 422b566bb..8fe53cb8c 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 9203d482b..a787e5d01 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 64d151c32..e6bcc3ac2 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 52ce91b56..eb6ec9063 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 219398f69..c70bbd0de 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 deceaace3..0017106fd 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 9bc16e790..638b276c2 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 085398a79..c932d0ea0 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 ce615ef30..ea3ee57a7 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 a20e98c3e..bf53841c3 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 6828caaaa..4f0c497e6 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 7b01b140e..b95313f4e 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 03b5b659b..76c663123 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 3dc285cee..a531adaac 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 97de4863e..29d09f454 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 488e14571..495a007bd 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:
-- 
GitLab