diff --git a/src/DataTree.hh b/src/DataTree.hh
index 73f8a7e8d9b086b4fe974a3b824b5d9fcba6d0be..192f788fded8b30b474996ef9c69d23a2c79f1e7 100644
--- a/src/DataTree.hh
+++ b/src/DataTree.hh
@@ -140,13 +140,9 @@ public:
   expr_t MinusOne, MinusInfinity;
 
   //! Raised when a local parameter is declared twice
-  class LocalVariableException
+  struct LocalVariableException
   {
-  public:
     string name;
-    explicit LocalVariableException(string name_arg) : name{move(name_arg)}
-    {
-    }
   };
 
   class DivisionByZeroException
@@ -291,13 +287,9 @@ public:
   };
 
   //! Raised when a trend is declared twice
-  class TrendException
+  struct TrendException
   {
-  public:
     string name;
-    explicit TrendException(string name_arg) : name{move(name_arg)}
-    {
-    }
   };
 
   // Returns the derivation ID, or throws an exception if the derivation ID does not exist
@@ -341,14 +333,10 @@ public:
     return false;
   };
 
-  class UnknownLocalVariableException
+  struct UnknownLocalVariableException
   {
-  public:
     //! Symbol ID
     int id;
-    explicit UnknownLocalVariableException(int id_arg) : id(id_arg)
-    {
-    }
   };
 
   expr_t
diff --git a/src/DynamicModel.hh b/src/DynamicModel.hh
index 972128f9e92d7927badae3332f4c46f9dbd8c05f..4d44f8836002a2e2292974a9916ea625d4fc1b74 100644
--- a/src/DynamicModel.hh
+++ b/src/DynamicModel.hh
@@ -551,13 +551,9 @@ public:
   void analyzePacEquationStructure(const string &name, map<string, string> &pac_eq_name, PacModelTable::equation_info_t &pac_equation_info);
 
   // Exception thrown by getPacTargetSymbId()
-  class PacTargetNotIdentifiedException
+  struct PacTargetNotIdentifiedException
   {
-  public:
     const string model_name, message;
-    PacTargetNotIdentifiedException(string model_name_arg, string message_arg) : model_name{move(model_name_arg)}, message{move(message_arg)}
-    {
-    }
   };
 
   //! Return target of the pac equation
diff --git a/src/EquationTags.hh b/src/EquationTags.hh
index 009c3fbbda76865472dd2eef5d09d90830109d63..e57753b862b25e3a8d2fe2fc6956df4a1d9dbfea 100644
--- a/src/EquationTags.hh
+++ b/src/EquationTags.hh
@@ -31,14 +31,9 @@ class EquationTags
 private:
   map<int, map<string, string>> eqn_tags;
 public:
-  class TagNotFoundException
+  struct TagNotFoundException
   {
-  public:
     const string key, value;
-    explicit TagNotFoundException(string key_arg, string value_arg)
-      : key{move(key_arg)}, value{move(value_arg)}
-    {
-    }
   };
 
   // Add multiple equation tags for the given equation
diff --git a/src/ExprNode.hh b/src/ExprNode.hh
index 5f5b6bfc11af11ea2c8aa9d8fc85c33a2dc70d46..1fdee2c66e56a0efce11ad3e2f6a9a74d3ce2e43 100644
--- a/src/ExprNode.hh
+++ b/src/ExprNode.hh
@@ -763,13 +763,9 @@ public:
   virtual pair<int, expr_t> matchEndogenousTimesConstant() const;
 
   //! Exception thrown when matching fails
-  class MatchFailureException
+  struct MatchFailureException
   {
-  public:
     const string message;
-    MatchFailureException(string message_arg) : message{move(message_arg)}
-    {
-    };
   };
 
   /* Match an expression of the form ∏ x(l)ᵏ, where x are endogenous, as used
diff --git a/src/ExternalFunctionsTable.hh b/src/ExternalFunctionsTable.hh
index 997f8db2c109e1e80605dae90b966905e2a55b52..1de10d9c8a60422af1236d08695d35d5e14a4bc6 100644
--- a/src/ExternalFunctionsTable.hh
+++ b/src/ExternalFunctionsTable.hh
@@ -33,14 +33,10 @@ class ExternalFunctionsTable
 {
 public:
   //! Thrown when trying to access an unknown symbol (by id)
-  class UnknownExternalFunctionSymbolIDException
+  struct UnknownExternalFunctionSymbolIDException
   {
-  public:
     //! Symbol ID
     int id;
-    explicit UnknownExternalFunctionSymbolIDException(int id_arg) : id{id_arg}
-    {
-    }
   };
 
   /* For all arguments, -2 means not set
diff --git a/src/SymbolList.hh b/src/SymbolList.hh
index 6964a8bc706a5e4462755fcd6ac02a57c7a838d9..f8db55db509c82073c45f30ba875bb9587f2dbe7 100644
--- a/src/SymbolList.hh
+++ b/src/SymbolList.hh
@@ -41,13 +41,9 @@ public:
   // This constructor is deliberately not marked explicit, to allow implicit conversion
   SymbolList(vector<string> symbols_arg);
 
-  class SymbolListException
+  struct SymbolListException
   {
-  public:
     const string message;
-    SymbolListException(string message_arg) : message{move(message_arg)}
-    {
-    };
   };
   //! Remove duplicate symbols
   void removeDuplicates(const string &dynare_command, WarningConsolidation &warnings);
diff --git a/src/SymbolTable.hh b/src/SymbolTable.hh
index 2e1fd2eb1b005cd428685c48cef3063351faab74..fb321d2a0e65a97fd56b6cb9666f1635c8cf5dc6 100644
--- a/src/SymbolTable.hh
+++ b/src/SymbolTable.hh
@@ -188,56 +188,36 @@ private:
 
 public:
   //! Thrown when trying to access an unknown symbol (by name)
-  class UnknownSymbolNameException
+  struct UnknownSymbolNameException
   {
-  public:
     //! Symbol name
     const string name;
-    explicit UnknownSymbolNameException(string name_arg) : name{move(name_arg)}
-    {
-    }
   };
   //! Thrown when trying to access an unknown symbol (by id)
-  class UnknownSymbolIDException
+  struct UnknownSymbolIDException
   {
-  public:
     //! Symbol ID
     const int id;
-    explicit UnknownSymbolIDException(int id_arg) : id{id_arg}
-    {
-    }
   };
   //! Thrown when trying to access an unknown type specific ID
-  class UnknownTypeSpecificIDException
+  struct UnknownTypeSpecificIDException
   {
-  public:
     const int tsid;
     const SymbolType type;
-    UnknownTypeSpecificIDException(int tsid_arg, SymbolType type_arg) : tsid{tsid_arg}, type{type_arg}
-    {
-    }
   };
   /* Thrown when requesting the type specific ID of a symbol which doesn’t
      have one */
-  class NoTypeSpecificIDException
+  struct NoTypeSpecificIDException
   {
-  public:
     const int symb_id;
-    explicit NoTypeSpecificIDException(int symb_id_arg) : symb_id{symb_id_arg}
-    {
-    }
   };
   //! Thrown when trying to declare a symbol twice
-  class AlreadyDeclaredException
+  struct AlreadyDeclaredException
   {
-  public:
     //! Symbol name
     const string name;
     //! Was the previous declaration done with the same symbol type ?
     const bool same_type;
-    AlreadyDeclaredException(string name_arg, bool same_type_arg) : name{move(name_arg)}, same_type{same_type_arg}
-    {
-    }
   };
   //! Thrown when table is frozen and trying to modify it
   class FrozenException
diff --git a/src/macro/Driver.hh b/src/macro/Driver.hh
index 7110c3ca75d00f4ede831e8a488eec72a58eafb9..b3a897dcbec4d72b9ab004550420ffc5f9da4c4f 100644
--- a/src/macro/Driver.hh
+++ b/src/macro/Driver.hh
@@ -69,13 +69,9 @@ namespace macro
     Driver &operator=(const Driver &) = delete;
 
     //! Exception thrown when value of an unknown variable is requested
-    class UnknownVariable
+    struct UnknownVariable
     {
-    public:
       const string name;
-      explicit UnknownVariable(string name_arg) : name{move(name_arg)}
-      {
-      }
     };
 
     //! Starts parsing a file, modifies `env`, `paths` and `output`