diff --git a/src/ConfigFile.hh b/src/ConfigFile.hh
index dfb048575745810cbed9f57f304e17feca9b7d01..1a90d36fe3bed1dc663ef1a3468986a7abd27a81 100644
--- a/src/ConfigFile.hh
+++ b/src/ConfigFile.hh
@@ -36,7 +36,7 @@ public:
 private:
   map<string, string> hooks;
 public:
-  inline map<string, string>
+  map<string, string>
   get_hooks() const
   {
     return hooks;
@@ -50,7 +50,7 @@ public:
 private:
   map<string, vector<string>> paths;
 public:
-  inline map<string, vector<string>>
+  map<string, vector<string>>
   get_paths() const
   {
     return paths;
diff --git a/src/DynamicModel.hh b/src/DynamicModel.hh
index 0d5d96aeda6fb1ad9d40c07cea537099a94f3f72..c6ec1a40304680293ae25b33e2c77678ecc4143d 100644
--- a/src/DynamicModel.hh
+++ b/src/DynamicModel.hh
@@ -363,13 +363,13 @@ public:
   //! Tells whether Hessian has been computed
   /*! This is needed to know whether no non-zero equation in Hessian means a
     zero Hessian or Hessian not computed */
-  inline bool
+  bool
   isHessianComputed() const
   {
     return computed_derivs_order >= 2;
   }
   //! Returns equations that have non-zero second derivatives
-  inline set<int>
+  set<int>
   getNonZeroHessianEquations() const
   {
     return nonzero_hessian_eqs;
@@ -505,13 +505,13 @@ public:
   //! Transforms the model by removing trends specified by the user
   void detrendEquations();
 
-  inline const nonstationary_symbols_map_t &
+  const nonstationary_symbols_map_t &
   getNonstationarySymbolsMap() const
   {
     return nonstationary_symbols_map;
   }
 
-  inline const map<int, expr_t> &
+  const map<int, expr_t> &
   getTrendSymbolsMap() const
   {
     return trend_symbols_map;
diff --git a/src/EquationTags.hh b/src/EquationTags.hh
index 1a2292c7ebf934c49847ccec21c10c2dcdd52d18..009c3fbbda76865472dd2eef5d09d90830109d63 100644
--- a/src/EquationTags.hh
+++ b/src/EquationTags.hh
@@ -42,7 +42,8 @@ public:
   };
 
   // Add multiple equation tags for the given equation
-  inline void add(int eqn, map<string, string> tags)
+  void
+  add(int eqn, map<string, string> tags)
   {
     if (eqn_tags.contains(eqn))
       eqn_tags[eqn].insert(move_iterator{tags.begin()}, move_iterator{tags.end()});
@@ -51,13 +52,15 @@ public:
   }
 
   //! Add a single equation tag for the given equation
-  inline void add(int eqn, string key, string value)
+  void
+  add(int eqn, string key, string value)
   {
     eqn_tags[eqn][move(key)] = move(value);
   }
 
   //! Clear all equation tag information
-  inline void clear()
+  void
+  clear()
   {
     eqn_tags.clear();
   }
@@ -68,7 +71,8 @@ public:
 
   //! Various functions to get info from equation tags
   //! Get equation tags for a given equation
-  inline map<string, string> getTagsByEqn(const int eqn) const
+  map<string, string>
+  getTagsByEqn(const int eqn) const
   {
     if (auto it = eqn_tags.find(eqn); it != eqn_tags.end())
       return it->second;
@@ -85,19 +89,22 @@ public:
   int getEqnByTag(const string &key, const string &value) const;
 
   //! Get the tag value given the equation number and key
-  inline string getTagValueByEqnAndKey(int eqn, const string &key) const
+  string
+  getTagValueByEqnAndKey(int eqn, const string &key) const
   {
     return exists(eqn, key) ? eqn_tags.at(eqn).at(key) : "";
   }
 
   //! Get the equations marked dynamic
-  inline set<int> getDynamicEqns() const
+  set<int>
+  getDynamicEqns() const
   {
     return getEqnsByTag("dynamic", "");
   }
 
   //! Returns true if equation tag with key and value exists
-  inline bool exists(const string &key, const string &value) const
+  bool
+  exists(const string &key, const string &value) const
   {
     try
       {
@@ -110,19 +117,22 @@ public:
     return true;
   }
 
-  inline bool exists(const int eqn) const
+  bool
+  exists(const int eqn) const
   {
     return eqn_tags.contains(eqn);
   }
 
   //! Returns true if equation tag with key exists for a given equation
-  inline bool exists(const int eqn, const string &key) const
+  bool
+  exists(const int eqn, const string &key) const
   {
     return exists(eqn) && eqn_tags.at(eqn).contains(key);
   }
 
   //! Returns true if equation tag with key and value exists for a given equation
-  inline bool exists(const int eqn, const string &key, const string &value) const
+  bool
+  exists(const int eqn, const string &key, const string &value) const
   {
     return exists(eqn, key) && eqn_tags.at(eqn).at(key) == value;
   }
diff --git a/src/ModelTree.hh b/src/ModelTree.hh
index 63c3491e1ec9f86b3554965cbad81bf82323d4d6..93afa63de4c158da29da8aed3e8e131886e5c27b 100644
--- a/src/ModelTree.hh
+++ b/src/ModelTree.hh
@@ -184,7 +184,11 @@ protected:
     int max_exo_det_lag{0}, max_exo_det_lead{0};
     int max_lag{0}, max_lead{0}; // The max over all endo/exo variables
 
-    inline int getRecursiveSize() const { return size - mfs_size; };
+    int
+    getRecursiveSize() const
+    {
+      return size - mfs_size;
+    };
   };
 
   // Stores various informations on the blocks
@@ -453,34 +457,34 @@ public:
   expr_t getRHSFromLHS(expr_t lhs) const;
 
   //! Returns all the equation tags associated to an equation
-  inline map<string, string>
+  map<string, string>
   getEquationTags(int eq) const
   {
     return equation_tags.getTagsByEqn(eq);
   }
 
   //! Returns the vector of non-zero derivative counts
-  inline const vector<int> &
+  const vector<int> &
   getNNZDerivatives() const
   {
     return NNZDerivatives;
   }
 
   //! Returns the vector of temporary terms derivatives
-  inline const vector<temporary_terms_t> &
+  const vector<temporary_terms_t> &
   getTemporaryTermsDerivatives() const
   {
     return temporary_terms_derivatives;
   }
 
   //!Returns the maximum order of computed derivatives
-  inline int
+  int
   getComputedDerivsOrder() const
   {
     return computed_derivs_order;
   }
 
-  inline static string
+  static string
   BlockSim(BlockSimulationType type)
   {
     switch (type)
diff --git a/src/WarningConsolidation.hh b/src/WarningConsolidation.hh
index 741d9b8f0f626704c1ecd4c7f8b897fb83ee3f41..c917aa05b5ae63240b4d9e7a4556faff7b882d2d 100644
--- a/src/WarningConsolidation.hh
+++ b/src/WarningConsolidation.hh
@@ -43,12 +43,12 @@ public:
   friend WarningConsolidation &operator<<(WarningConsolidation &wcc, const Dynare::location &loc);
   friend WarningConsolidation &operator<<(WarningConsolidation &wcc, ostream &(*pf)(ostream &));
 
-  inline void
+  void
   addWarning(const string &w)
   {
     warnings << w;
   };
-  inline void
+  void
   addWarning(ostream &(*pf)(ostream &))
   {
     warnings << pf;
diff --git a/src/macro/Directives.hh b/src/macro/Directives.hh
index ae24362d26f9884da78deacff8eb950eda1b4226..7796df41d376a8f8ce9b0b42fefcaeccda1208ca 100644
--- a/src/macro/Directives.hh
+++ b/src/macro/Directives.hh
@@ -47,7 +47,11 @@ namespace macro
   public:
     TextNode(string text_arg, Tokenizer::location location_arg) :
       Directive(move(location_arg)), text{move(text_arg)} { }
-    inline void interpret(ostream &output, Environment &env, vector<filesystem::path> &paths) override { output << text; }
+    void
+    interpret(ostream &output, Environment &env, vector<filesystem::path> &paths) override
+    {
+      output << text;
+    }
   };
 
 
diff --git a/src/macro/Driver.hh b/src/macro/Driver.hh
index b28d7bb4f9d0b959f5bb31ecebda145809c34439..7110c3ca75d00f4ede831e8a488eec72a58eafb9 100644
--- a/src/macro/Driver.hh
+++ b/src/macro/Driver.hh
@@ -96,31 +96,31 @@ namespace macro
     //! Error handler
     void error(const Tokenizer::parser::location_type &location, const string &message) const;
 
-    inline bool
+    bool
     inContext() const
     {
       return !directive_stack.empty();
     }
 
-    inline void
+    void
     pushContext()
     {
       directive_stack.emplace(vector<DirectivePtr>());
     }
 
-    inline void
+    void
     pushContextTop(DirectivePtr statement)
     {
       directive_stack.top().emplace_back(move(statement));
     }
 
-    inline void
+    void
     pushStatements(DirectivePtr statement)
     {
       statements.emplace_back(move(statement));
     }
 
-    inline vector<DirectivePtr>
+    vector<DirectivePtr>
     popContext()
     {
       auto top = move(directive_stack.top());
diff --git a/src/macro/Environment.hh b/src/macro/Environment.hh
index 9135711857a8cb583804ec6c0368c850c9df0a0b..91a488d176f5a8f8e23c29b0aff5bfaff5dc8664 100644
--- a/src/macro/Environment.hh
+++ b/src/macro/Environment.hh
@@ -44,12 +44,23 @@ namespace macro
     codes::BaseType getType(const string &name) const;
     bool isVariableDefined(const string &name) const noexcept;
     bool isFunctionDefined(const string &name) const noexcept;
-    inline bool isSymbolDefined(const string &name) const noexcept { return isVariableDefined(name) || isFunctionDefined(name); }
+    bool isSymbolDefined(const string &name) const noexcept
+    {
+      return isVariableDefined(name) || isFunctionDefined(name);
+    }
     void print(ostream &output, const vector<string> &vars, const optional<int> &line = nullopt, bool save = false) const;
     void printVariable(ostream &output, const string &name, const optional<int> &line, bool save) const;
     void printFunction(ostream &output, const tuple<FunctionPtr, ExpressionPtr> &function, const optional<int> &line, bool save) const;
-    inline size_t size() const noexcept { return variables.size() + functions.size(); }
-    inline const Environment *getGlobalEnv() const noexcept { return parent == nullptr ? this : parent->getGlobalEnv(); }
+    size_t
+    size() const noexcept
+    {
+      return variables.size() + functions.size();
+    }
+    const Environment *
+    getGlobalEnv() const noexcept
+    {
+      return parent == nullptr ? this : parent->getGlobalEnv();
+    }
   };
 }
 #endif
diff --git a/src/macro/Expressions.hh b/src/macro/Expressions.hh
index 8766eff57a6399788ab2fc5f58fdf29a696d1976..d6ae98dc7a8141b811a23599f6b9a0d4592998dc 100644
--- a/src/macro/Expressions.hh
+++ b/src/macro/Expressions.hh
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2019-2020 Dynare Team
+ * Copyright © 2019-2022 Dynare Team
  *
  * This file is part of Dynare.
  *
@@ -87,21 +87,25 @@ namespace macro
       location{move(location_arg)} { }
     virtual ~Node() = default;
   public:
-    inline Tokenizer::location getLocation() const noexcept { return location; }
-    inline void error(const StackTrace &e) const noexcept
+    Tokenizer::location getLocation() const noexcept { return location; }
+    void
+    error(const StackTrace &e) const noexcept
     {
       cerr << endl << "Macro-processing error: backtrace..." << endl << e.trace();
       exit(EXIT_FAILURE);
     }
-    inline void warning(const StackTrace &e) const noexcept
+    void
+    warning(const StackTrace &e) const noexcept
     {
       cerr << endl << "Macro-processing warning: backtrace..." << endl << e.trace();
     }
-    inline void printLineInfo(ostream &output) const noexcept
+    void
+    printLineInfo(ostream &output) const noexcept
     {
       output << R"(@#line ")" << *(location.begin.filename) << R"(" )" << location.begin.line << endl;
     }
-    inline void printEndLineInfo(ostream &output) const noexcept
+    void
+    printEndLineInfo(ostream &output) const noexcept
     {
       // Add one to end line because we want to print the line number of the line *following* the end statement
       output << R"(@#line ")" << *(location.begin.filename) << R"(" )" << location.end.line + 1 << endl;
@@ -127,7 +131,7 @@ namespace macro
     explicit BaseType(Tokenizer::location location_arg = Tokenizer::location()) :
       Expression(move(location_arg)) { }
     virtual codes::BaseType getType() const noexcept = 0;
-    inline BaseTypePtr eval(Environment &env) override { return shared_from_this(); }
+    BaseTypePtr eval(Environment &env) override { return shared_from_this(); }
   public:
     virtual BaseTypePtr plus(const BaseTypePtr &bt) const { throw StackTrace("Operator + does not exist for this type"); }
     virtual BaseTypePtr unary_plus() const { throw StackTrace("Unary operator + does not exist for this type"); }
@@ -206,25 +210,27 @@ namespace macro
          Tokenizer::location location_arg = Tokenizer::location()) :
       BaseType(move(location_arg)),
       value{value_arg} { }
-    inline codes::BaseType getType() const noexcept override { return codes::BaseType::Bool; }
-    inline string to_string() const noexcept override { return value ? "true" : "false"; }
-    inline void print(ostream &output, bool matlab_output = false) const noexcept override { output << to_string(); }
-    inline ExpressionPtr clone() const noexcept override { return make_shared<Bool>(value, location); }
+    codes::BaseType getType() const noexcept override { return codes::BaseType::Bool; }
+    string to_string() const noexcept override { return value ? "true" : "false"; }
+    void print(ostream &output, bool matlab_output = false) const noexcept override { output << to_string(); }
+    ExpressionPtr clone() const noexcept override { return make_shared<Bool>(value, location); }
   public:
     operator bool() const { return value; }
     BoolPtr is_equal(const BaseTypePtr &btp) const override;
     BoolPtr logical_and(const ExpressionPtr &ep, Environment &env) const override;
     BoolPtr logical_or(const ExpressionPtr &ep, Environment &env) const override;
     BoolPtr logical_not() const override;
-    inline BoolPtr isboolean() const noexcept override { return make_shared<Bool>(true, location); }
-    inline BoolPtr cast_bool(Environment &env) const override { return make_shared<Bool>(value); }
-    inline RealPtr cast_real(Environment &env) const override { return value ? make_shared<Real>(1) : make_shared<Real>(0); }
-    inline StringPtr cast_string() const override { return make_shared<String>(this->to_string()); }
-    inline TuplePtr cast_tuple() const override
+    BoolPtr isboolean() const noexcept override { return make_shared<Bool>(true, location); }
+    BoolPtr cast_bool(Environment &env) const override { return make_shared<Bool>(value); }
+    RealPtr cast_real(Environment &env) const override { return value ? make_shared<Real>(1) : make_shared<Real>(0); }
+    StringPtr cast_string() const override { return make_shared<String>(this->to_string()); }
+    TuplePtr
+    cast_tuple() const override
     {
       return make_shared<Tuple>(vector<ExpressionPtr>{make_shared<Bool>(value)});
     }
-    inline ArrayPtr cast_array() const override
+    ArrayPtr
+    cast_array() const override
     {
       return make_shared<Array>(vector<ExpressionPtr>{make_shared<Bool>(value)});
     }
@@ -246,21 +252,22 @@ namespace macro
          Tokenizer::location location_arg = Tokenizer::location()) :
       BaseType(move(location_arg)),
       value{value_arg} { }
-    inline codes::BaseType getType() const noexcept override { return codes::BaseType::Real; }
-    inline string to_string() const noexcept override
+    codes::BaseType getType() const noexcept override { return codes::BaseType::Real; }
+    string
+    to_string() const noexcept override
     {
       ostringstream strs;
       strs << setprecision(15) << value;
       return strs.str();
     }
-    inline void print(ostream &output, bool matlab_output = false) const noexcept override { output << to_string(); }
-    inline ExpressionPtr clone() const noexcept override { return make_shared<Real>(value, location); }
+    void print(ostream &output, bool matlab_output = false) const noexcept override { output << to_string(); }
+    ExpressionPtr clone() const noexcept override { return make_shared<Real>(value, location); }
   public:
     operator double() const { return value; }
     BaseTypePtr plus(const BaseTypePtr &bt) const override;
-    inline BaseTypePtr unary_plus() const override { return make_shared<Real>(value); }
+    BaseTypePtr unary_plus() const override { return make_shared<Real>(value); }
     BaseTypePtr minus(const BaseTypePtr &bt) const override;
-    inline BaseTypePtr unary_minus() const override { return make_shared<Real>(-value); }
+    BaseTypePtr unary_minus() const override { return make_shared<Real>(-value); }
     BaseTypePtr times(const BaseTypePtr &bt) const override;
     BaseTypePtr divide(const BaseTypePtr &bt) const override;
     BaseTypePtr power(const BaseTypePtr &btp) const override;
@@ -269,8 +276,8 @@ namespace macro
     BoolPtr is_less_equal(const BaseTypePtr &btp) const override;
     BoolPtr is_greater_equal(const BaseTypePtr &btp) const override;
     BoolPtr is_equal(const BaseTypePtr &btp) const override;
-    inline BoolPtr isreal() const noexcept override { return make_shared<Bool>(true, location); }
-    inline BoolPtr isinteger() const noexcept override
+    BoolPtr isreal() const noexcept override { return make_shared<Bool>(true, location); }
+    BoolPtr isinteger() const noexcept override
     {
       double intpart;
       return make_shared<Bool>(modf(value, &intpart) == 0.0, location);
@@ -281,51 +288,56 @@ namespace macro
     RealPtr max(const BaseTypePtr &btp) const override;
     RealPtr min(const BaseTypePtr &btp) const override;
     RealPtr mod(const BaseTypePtr &btp) const override;
-    inline RealPtr exp() const override { return make_shared<Real>(std::exp(value)); }
-    inline RealPtr ln() const override { return make_shared<Real>(std::log(value)); }
-    inline RealPtr log10() const override { return make_shared<Real>(std::log10(value)); }
-    inline BoolPtr isinf() const override { return make_shared<Bool>(std::isinf(value)); }
-    inline BoolPtr isnan() const override { return make_shared<Bool>(std::isnan(value)); }
-    inline BoolPtr isfinite() const override { return make_shared<Bool>(std::isfinite(value)); }
-    inline BoolPtr isnormal() const override { return make_shared<Bool>(std::isnormal(value)); }
-    inline RealPtr sin() const override { return make_shared<Real>(std::sin(value)); }
-    inline RealPtr cos() const override { return make_shared<Real>(std::cos(value)); }
-    inline RealPtr tan() const override { return make_shared<Real>(std::tan(value)); }
-    inline RealPtr asin() const override { return make_shared<Real>(std::asin(value)); }
-    inline RealPtr acos() const override { return make_shared<Real>(std::acos(value)); }
-    inline RealPtr atan() const override { return make_shared<Real>(std::atan(value)); }
-    inline RealPtr sqrt() const override { return make_shared<Real>(std::sqrt(value)); }
-    inline RealPtr cbrt() const override { return make_shared<Real>(std::cbrt(value)); }
-    inline RealPtr sign() const override
+    RealPtr exp() const override { return make_shared<Real>(std::exp(value)); }
+    RealPtr ln() const override { return make_shared<Real>(std::log(value)); }
+    RealPtr log10() const override { return make_shared<Real>(std::log10(value)); }
+    BoolPtr isinf() const override { return make_shared<Bool>(std::isinf(value)); }
+    BoolPtr isnan() const override { return make_shared<Bool>(std::isnan(value)); }
+    BoolPtr isfinite() const override { return make_shared<Bool>(std::isfinite(value)); }
+    BoolPtr isnormal() const override { return make_shared<Bool>(std::isnormal(value)); }
+    RealPtr sin() const override { return make_shared<Real>(std::sin(value)); }
+    RealPtr cos() const override { return make_shared<Real>(std::cos(value)); }
+    RealPtr tan() const override { return make_shared<Real>(std::tan(value)); }
+    RealPtr asin() const override { return make_shared<Real>(std::asin(value)); }
+    RealPtr acos() const override { return make_shared<Real>(std::acos(value)); }
+    RealPtr atan() const override { return make_shared<Real>(std::atan(value)); }
+    RealPtr sqrt() const override { return make_shared<Real>(std::sqrt(value)); }
+    RealPtr cbrt() const override { return make_shared<Real>(std::cbrt(value)); }
+    RealPtr
+    sign() const override
     {
       return make_shared<Real>((value > 0) ? 1. : ((value < 0) ? -1. : 0.));
     }
-    inline RealPtr floor() const override { return make_shared<Real>(std::floor(value)); }
-    inline RealPtr ceil() const override { return make_shared<Real>(std::ceil(value)); }
-    inline RealPtr trunc() const override { return make_shared<Real>(std::trunc(value)); }
-    inline RealPtr erf() const override { return make_shared<Real>(std::erf(value)); }
-    inline RealPtr erfc() const override { return make_shared<Real>(std::erfc(value)); }
-    inline RealPtr gamma() const override { return make_shared<Real>(std::tgamma(value)); }
-    inline RealPtr lgamma() const override { return make_shared<Real>(std::lgamma(value)); }
-    inline RealPtr round() const override { return make_shared<Real>(std::round(value)); }
-    inline RealPtr normpdf() const override
+    RealPtr floor() const override { return make_shared<Real>(std::floor(value)); }
+    RealPtr ceil() const override { return make_shared<Real>(std::ceil(value)); }
+    RealPtr trunc() const override { return make_shared<Real>(std::trunc(value)); }
+    RealPtr erf() const override { return make_shared<Real>(std::erf(value)); }
+    RealPtr erfc() const override { return make_shared<Real>(std::erfc(value)); }
+    RealPtr gamma() const override { return make_shared<Real>(std::tgamma(value)); }
+    RealPtr lgamma() const override { return make_shared<Real>(std::lgamma(value)); }
+    RealPtr round() const override { return make_shared<Real>(std::round(value)); }
+    RealPtr
+    normpdf() const override
     {
       return normpdf(make_shared<Real>(0), make_shared<Real>(1));
     }
     RealPtr normpdf(const BaseTypePtr &btp1, const BaseTypePtr &btp2) const override;
-    inline RealPtr normcdf() const override
+    RealPtr
+    normcdf() const override
     {
       return normcdf(make_shared<Real>(0), make_shared<Real>(1));
     }
     RealPtr normcdf(const BaseTypePtr &btp1, const BaseTypePtr &btp2) const override;
-    inline BoolPtr cast_bool(Environment &env) const override { return make_shared<Bool>(static_cast<bool>(value)); }
-    inline RealPtr cast_real(Environment &env) const override { return make_shared<Real>(value); }
-    inline StringPtr cast_string() const override { return make_shared<String>(this->to_string()); }
-    inline TuplePtr cast_tuple() const override
+    BoolPtr cast_bool(Environment &env) const override { return make_shared<Bool>(static_cast<bool>(value)); }
+    RealPtr cast_real(Environment &env) const override { return make_shared<Real>(value); }
+    StringPtr cast_string() const override { return make_shared<String>(this->to_string()); }
+    TuplePtr
+    cast_tuple() const override
     {
       return make_shared<Tuple>(vector<ExpressionPtr>{make_shared<Real>(value)});
     }
-    inline ArrayPtr cast_array() const override
+    ArrayPtr
+    cast_array() const override
     {
       return make_shared<Array>(vector<ExpressionPtr>{make_shared<Real>(value)});
     }
@@ -340,10 +352,10 @@ namespace macro
            Tokenizer::location location_arg = Tokenizer::location()) :
       BaseType(move(location_arg)),
       value{move(value_arg)} { }
-    inline codes::BaseType getType() const noexcept override { return codes::BaseType::String; }
-    inline string to_string() const noexcept override { return value; }
+    codes::BaseType getType() const noexcept override { return codes::BaseType::String; }
+    string to_string() const noexcept override { return value; }
     void print(ostream &output, bool matlab_output = false) const noexcept override;
-    inline ExpressionPtr clone() const noexcept override { return make_shared<String>(value, location); }
+    ExpressionPtr clone() const noexcept override { return make_shared<String>(value, location); }
   public:
     operator string() const { return value; }
     BaseTypePtr plus(const BaseTypePtr &bt) const override;
@@ -352,21 +364,24 @@ namespace macro
     BoolPtr is_less_equal(const BaseTypePtr &btp) const override;
     BoolPtr is_greater_equal(const BaseTypePtr &btp) const override;
     BoolPtr is_equal(const BaseTypePtr &btp) const override;
-    inline BoolPtr isstring() const noexcept override { return make_shared<Bool>(true, location); }
-    inline RealPtr length() const override { return make_shared<Real>(value.size()); }
-    inline BoolPtr isempty() const override { return make_shared<Bool>(value.empty()); }
+    BoolPtr isstring() const noexcept override { return make_shared<Bool>(true, location); }
+    RealPtr length() const override { return make_shared<Real>(value.size()); }
+    BoolPtr isempty() const override { return make_shared<Bool>(value.empty()); }
     BoolPtr cast_bool(Environment &env) const override;
     RealPtr cast_real(Environment &env) const override;
-    inline StringPtr cast_string() const override { return make_shared<String>(value); }
-    inline TuplePtr cast_tuple() const override
+    StringPtr cast_string() const override { return make_shared<String>(value); }
+    TuplePtr
+    cast_tuple() const override
     {
       return make_shared<Tuple>(vector<ExpressionPtr>{make_shared<String>(value)});
     }
-    inline ArrayPtr cast_array() const override
+    ArrayPtr
+    cast_array() const override
     {
       return make_shared<Array>(vector<ExpressionPtr>{make_shared<String>(value)});
     }
-    inline BoolPtr defined(const Environment &env) const override
+    BoolPtr
+    defined(const Environment &env) const override
     {
       return make_shared<Bool>(env.isSymbolDefined(value));
     }
@@ -382,26 +397,26 @@ namespace macro
           Tokenizer::location location_arg = Tokenizer::location()) :
       BaseType(move(location_arg)),
       tup{move(tup_arg)} { }
-    inline codes::BaseType getType() const noexcept override { return codes::BaseType::Tuple; }
+    codes::BaseType getType() const noexcept override { return codes::BaseType::Tuple; }
     string to_string() const noexcept override;
     void print(ostream &output, bool matlab_output = false) const noexcept override;
     BaseTypePtr eval(Environment &env) override;
     ExpressionPtr clone() const noexcept override;
   public:
-    inline size_t size() const { return tup.size(); }
-    inline bool empty() const { return tup.empty(); }
-    inline const vector<ExpressionPtr> &getValue() const { return tup; }
-    inline const ExpressionPtr &at(int i) const { return tup.at(i); }
+    size_t size() const { return tup.size(); }
+    bool empty() const { return tup.empty(); }
+    const vector<ExpressionPtr> &getValue() const { return tup; }
+    const ExpressionPtr &at(int i) const { return tup.at(i); }
     BoolPtr is_equal(const BaseTypePtr &btp) const override;
-    inline BoolPtr istuple() const noexcept override { return make_shared<Bool>(true, location); }
+    BoolPtr istuple() const noexcept override { return make_shared<Bool>(true, location); }
     BoolPtr contains(const BaseTypePtr &btp) const override;
-    inline RealPtr length() const override { return make_shared<Real>(tup.size()); }
-    inline BoolPtr isempty() const override { return make_shared<Bool>(empty()); }
+    RealPtr length() const override { return make_shared<Real>(tup.size()); }
+    BoolPtr isempty() const override { return make_shared<Bool>(empty()); }
     BoolPtr cast_bool(Environment &env) const override;
     RealPtr cast_real(Environment &env) const override;
-    inline StringPtr cast_string() const override { return make_shared<String>(this->to_string()); }
-    inline TuplePtr cast_tuple() const override { return make_shared<Tuple>(tup); }
-    inline ArrayPtr cast_array() const override { return make_shared<Array>(tup); }
+    StringPtr cast_string() const override { return make_shared<String>(this->to_string()); }
+    TuplePtr cast_tuple() const override { return make_shared<Tuple>(tup); }
+    ArrayPtr cast_array() const override { return make_shared<Array>(tup); }
   };
 
 
@@ -413,33 +428,33 @@ namespace macro
     Array(vector<ExpressionPtr> arr_arg,
           Tokenizer::location location_arg = Tokenizer::location()) :
       BaseType(move(location_arg)), arr{move(arr_arg)} { }
-    inline codes::BaseType getType() const noexcept override { return codes::BaseType::Array; }
+    codes::BaseType getType() const noexcept override { return codes::BaseType::Array; }
     string to_string() const noexcept override;
     void print(ostream &output, bool matlab_output = false) const noexcept override;
     BaseTypePtr eval(Environment &env) override;
     ExpressionPtr clone() const noexcept override;
   public:
-    inline size_t size() const { return arr.size(); }
-    inline const vector<ExpressionPtr> &getValue() const { return arr; }
-    inline const ExpressionPtr &at(int i) const { return arr.at(i); }
-    inline bool empty() const { return arr.empty(); }
+    size_t size() const { return arr.size(); }
+    const vector<ExpressionPtr> &getValue() const { return arr; }
+    const ExpressionPtr &at(int i) const { return arr.at(i); }
+    bool empty() const { return arr.empty(); }
     BaseTypePtr plus(const BaseTypePtr &bt) const override;
     BaseTypePtr minus(const BaseTypePtr &bt) const override;
     BaseTypePtr times(const BaseTypePtr &bt) const override;
     BaseTypePtr power(const BaseTypePtr &btp) const override;
     BoolPtr is_equal(const BaseTypePtr &btp) const override;
-    inline BoolPtr isarray() const noexcept override { return make_shared<Bool>(true, location); }
+    BoolPtr isarray() const noexcept override { return make_shared<Bool>(true, location); }
     ArrayPtr set_union(const BaseTypePtr &btp) const override;
     ArrayPtr set_intersection(const BaseTypePtr &btp) const override;
     BoolPtr contains(const BaseTypePtr &btp) const override;
-    inline RealPtr length() const override { return make_shared<Real>(arr.size()); }
-    inline BoolPtr isempty() const override { return make_shared<Bool>(empty()); }
+    RealPtr length() const override { return make_shared<Real>(arr.size()); }
+    BoolPtr isempty() const override { return make_shared<Bool>(empty()); }
     RealPtr sum() const override;
     BoolPtr cast_bool(Environment &env) const override;
     RealPtr cast_real(Environment &env) const override;
-    inline StringPtr cast_string() const override { return make_shared<String>(this->to_string()); }
-    inline TuplePtr cast_tuple() const override { return make_shared<Tuple>(arr); }
-    inline ArrayPtr cast_array() const override { return make_shared<Array>(arr); }
+    StringPtr cast_string() const override { return make_shared<String>(this->to_string()); }
+    TuplePtr cast_tuple() const override { return make_shared<Tuple>(arr); }
+    ArrayPtr cast_array() const override { return make_shared<Array>(arr); }
   };
 
 
@@ -455,24 +470,27 @@ namespace macro
           Tokenizer::location location_arg) :
       BaseType(move(location_arg)),
       start{move(start_arg)}, inc{move(inc_arg)}, end{move(end_arg)} { }
-    inline codes::BaseType getType() const noexcept override { return codes::BaseType::Range; }
-    inline string to_string() const noexcept override
+    codes::BaseType getType() const noexcept override { return codes::BaseType::Range; }
+    string
+    to_string() const noexcept override
     {
       string retval = "[" + start->to_string() + ":";
       if (inc)
         retval += inc->to_string() + ":";
       return retval + end->to_string() + "]";
     }
-    inline void print(ostream &output, bool matlab_output = false) const noexcept override { output << to_string(); }
+    void print(ostream &output, bool matlab_output = false) const noexcept override { output << to_string(); }
     BaseTypePtr eval(Environment &env) override;
-    inline ExpressionPtr clone() const noexcept override
+    ExpressionPtr
+    clone() const noexcept override
     {
       return inc ?
         make_shared<Range>(start, inc, end, location)
         : make_shared<Range>(start, end, location);
     }
   public:
-    inline BoolPtr is_equal(const BaseTypePtr &btp) const override
+    BoolPtr
+    is_equal(const BaseTypePtr &btp) const override
     {
       throw StackTrace("Internal error: Range: Should not arrive here: is_equal");
     }
@@ -491,17 +509,18 @@ namespace macro
     Variable(string name_arg, ArrayPtr indices_arg,
              Tokenizer::location location_arg) :
       Expression(move(location_arg)), name{move(name_arg)}, indices{move(indices_arg)} { }
-    inline string to_string() const noexcept override { return name; }
-    inline void print(ostream &output, bool matlab_output = false) const noexcept override { output << name; }
+    string to_string() const noexcept override { return name; }
+    void print(ostream &output, bool matlab_output = false) const noexcept override { output << name; }
     BaseTypePtr eval(Environment &env) override;
-    inline ExpressionPtr clone() const noexcept override
+    ExpressionPtr
+    clone() const noexcept override
     {
       return indices ? make_shared<Variable>(name, indices, location) :
         make_shared<Variable>(name, location);
     }
   public:
-    inline const string &getName() const noexcept { return name; }
-    inline codes::BaseType getType(const Environment &env) const { return env.getType(name); }
+    const string &getName() const noexcept { return name; }
+    codes::BaseType getType(const Environment &env) const { return env.getType(name); }
   };
 
 
@@ -516,17 +535,18 @@ namespace macro
              Tokenizer::location location_arg) :
       Expression(move(location_arg)), name{move(name_arg)}, args{move(args_arg)} { }
     string to_string() const noexcept override;
-    inline void print(ostream &output, bool matlab_output = false) const noexcept override
+    void
+    print(ostream &output, bool matlab_output = false) const noexcept override
     {
       printName(output); printArgs(output);
     }
     BaseTypePtr eval(Environment &env) override;
     ExpressionPtr clone() const noexcept override;
   public:
-    inline void printName(ostream &output) const noexcept { output << name; }
+    void printName(ostream &output) const noexcept { output << name; }
     void printArgs(ostream &output) const noexcept;
-    inline const string &getName() const { return name; }
-    inline const vector<ExpressionPtr> &getArgs() const { return args; }
+    const string &getName() const { return name; }
+    const vector<ExpressionPtr> &getArgs() const { return args; }
   };
 
 
@@ -543,7 +563,8 @@ namespace macro
     string to_string() const noexcept override;
     void print(ostream &output, bool matlab_output = false) const noexcept override;
     BaseTypePtr eval(Environment &env) override;
-    inline ExpressionPtr clone() const noexcept override
+    ExpressionPtr
+    clone() const noexcept override
     {
       return make_shared<UnaryOp>(op_code, arg->clone(), location);
     }
@@ -565,7 +586,8 @@ namespace macro
     string to_string() const noexcept override;
     void print(ostream &output, bool matlab_output = false) const noexcept override;
     BaseTypePtr eval(Environment &env) override;
-    inline ExpressionPtr clone() const noexcept override
+    ExpressionPtr
+    clone() const noexcept override
     {
       return make_shared<BinaryOp>(op_code, arg1->clone(), arg2->clone(), location);
     }
@@ -586,7 +608,8 @@ namespace macro
     string to_string() const noexcept override;
     void print(ostream &output, bool matlab_output = false) const noexcept override;
     BaseTypePtr eval(Environment &env) override;
-    inline ExpressionPtr clone() const noexcept override
+    ExpressionPtr
+    clone() const noexcept override
     {
       return make_shared<TrinaryOp>(op_code, arg1->clone(), arg2->clone(), arg3->clone(), location);
     }