diff --git a/src/CodeInterpreter.hh b/src/CodeInterpreter.hh
index 9ddb572f81b2a1d39e0bd87ff3f542f76744120f..30ce42138b79b79ffdb285fda886dd08d9d4da06 100644
--- a/src/CodeInterpreter.hh
+++ b/src/CodeInterpreter.hh
@@ -1706,7 +1706,7 @@ public:
     tags_liste_t tags_liste;
     ifstream CompiledCode;
     streamoff Code_Size;
-    CompiledCode.open((file_name + ".cod").c_str(), std::ios::in | std::ios::binary| std::ios::ate);
+    CompiledCode.open(file_name + ".cod", std::ios::in | std::ios::binary| std::ios::ate);
     if (!CompiledCode.is_open())
       {
         return tags_liste;
diff --git a/src/ConfigFile.cc b/src/ConfigFile.cc
index a9b37378baa1475b8102976dfdf8d59b46c9f849..b32217962c5de8296b6b111436f21eda4f674297 100644
--- a/src/ConfigFile.cc
+++ b/src/ConfigFile.cc
@@ -138,7 +138,7 @@ ConfigFile::getConfigFileInfo(const string &config_file)
           defaultConfigFile += "/.dynare";
         }
 #endif
-      configFile = new ifstream(defaultConfigFile.c_str(), fstream::in);
+      configFile = new ifstream(defaultConfigFile, fstream::in);
       if (!configFile->is_open())
         if (parallel || parallel_test)
           {
@@ -150,7 +150,7 @@ ConfigFile::getConfigFileInfo(const string &config_file)
     }
   else
     {
-      configFile = new ifstream(config_file.c_str(), fstream::in);
+      configFile = new ifstream(config_file, fstream::in);
       if (!configFile->is_open())
         {
           cerr << "ERROR: Couldn't open file " << config_file << endl;;
diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc
index 3b3c450f7bb1230cd042fc49b7942ca87e95a1f6..f06f80940a047d12ab0b7c9eeac0fc3870512e17 100644
--- a/src/DynamicModel.cc
+++ b/src/DynamicModel.cc
@@ -320,7 +320,7 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const
 
       tmp1_output.str("");
       tmp1_output << packageDir(basename + ".block") << "/dynamic_" << block+1 << ".m";
-      output.open(tmp1_output.str().c_str(), ios::out | ios::binary);
+      output.open(tmp1_output.str(), ios::out | ios::binary);
       output << "%\n";
       output << "% " << tmp1_output.str() << " : Computes dynamic model for Dynare\n";
       output << "%\n";
@@ -795,7 +795,7 @@ DynamicModel::writeModelEquationsCode(const string &basename, const map_idx_t &m
   boost::filesystem::create_directories(basename + "/model/bytecode");
 
   string main_name = basename + "/model/bytecode/dynamic.cod";
-  code_file.open(main_name.c_str(), ios::out | ios::binary | ios::ate);
+  code_file.open(main_name, ios::out | ios::binary | ios::ate);
   if (!code_file.is_open())
     {
       cerr << "Error : Can't open file \"" << main_name << "\" for writing" << endl;
@@ -1070,7 +1070,7 @@ DynamicModel::writeModelEquationsCode_Block(const string &basename, const map_id
   boost::filesystem::create_directories(basename + "/model/bytecode");
 
   string main_name = basename + "/model/bytecode/dynamic.cod";
-  code_file.open(main_name.c_str(), ios::out | ios::binary | ios::ate);
+  code_file.open(main_name, ios::out | ios::binary | ios::ate);
   if (!code_file.is_open())
     {
       cerr << "Error : Can't open file \"" << main_name << "\" for writing" << endl;
@@ -1559,7 +1559,7 @@ DynamicModel::writeDynamicCFile(const string &basename, const int order) const
   string filename_mex = basename + "/model/src/dynamic_mex.c";
   ofstream mDynamicModelFile, mDynamicMexFile;
 
-  mDynamicModelFile.open(filename.c_str(), ios::out | ios::binary);
+  mDynamicModelFile.open(filename, ios::out | ios::binary);
   if (!mDynamicModelFile.is_open())
     {
       cerr << "Error: Can't open file " << filename << " for writing" << endl;
@@ -1598,7 +1598,7 @@ DynamicModel::writeDynamicCFile(const string &basename, const int order) const
   writeNormcdf(mDynamicModelFile);
   mDynamicModelFile.close();
 
-  mDynamicMexFile.open(filename_mex.c_str(), ios::out | ios::binary);
+  mDynamicMexFile.open(filename_mex, ios::out | ios::binary);
   if (!mDynamicMexFile.is_open())
     {
       cerr << "Error: Can't open file " << filename_mex << " for writing" << endl;
@@ -1802,7 +1802,7 @@ DynamicModel::writeSparseDynamicMFile(const string &basename) const
   ostringstream tmp, tmp1, tmp_eq;
   bool OK;
   string filename = packageDir(basename) + "/dynamic.m";
-  mDynamicModelFile.open(filename.c_str(), ios::out | ios::binary);
+  mDynamicModelFile.open(filename, ios::out | ios::binary);
   if (!mDynamicModelFile.is_open())
     {
       cerr << "Error: Can't open file " << filename << " for writing" << endl;
@@ -2144,7 +2144,7 @@ DynamicModel::writeWrapperFunctions(const string &basename, const string &ending
 
   string filename = packageDir(basename) + "/" + name + ".m";
   ofstream output;
-  output.open(filename.c_str(), ios::out | ios::binary);
+  output.open(filename, ios::out | ios::binary);
   if (!output.is_open())
     {
       cerr << "Error: Can't open file " << filename << " for writing" << endl;
@@ -2194,7 +2194,7 @@ DynamicModel::writeDynamicModelHelper(const string &basename,
 {
   string filename = packageDir(basename) + "/" + name_tt + ".m";
   ofstream output;
-  output.open(filename.c_str(), ios::out | ios::binary);
+  output.open(filename, ios::out | ios::binary);
   if (!output.is_open())
     {
       cerr << "Error: Can't open file " << filename << " for writing" << endl;
@@ -2231,7 +2231,7 @@ DynamicModel::writeDynamicModelHelper(const string &basename,
   output.close();
 
   filename = packageDir(basename) + "/" + name + ".m";
-  output.open(filename.c_str(), ios::out | ios::binary);
+  output.open(filename, ios::out | ios::binary);
   if (!output.is_open())
     {
       cerr << "Error: Can't open file " << filename << " for writing" << endl;
@@ -2276,7 +2276,7 @@ DynamicModel::writeDynamicMatlabCompatLayer(const string &basename) const
 {
   string filename = packageDir(basename) + "/dynamic.m";
   ofstream output;
-  output.open(filename.c_str(), ios::out | ios::binary);
+  output.open(filename, ios::out | ios::binary);
   if (!output.is_open())
     {
       cerr << "Error: Can't open file " << filename << " for writing" << endl;
@@ -2633,7 +2633,7 @@ DynamicModel::writeDynamicModel(const string &basename, ostream &DynamicOutput,
     {
       string filename = basename + "Dynamic.jl";
       ofstream output;
-      output.open(filename.c_str(), ios::out | ios::binary);
+      output.open(filename, ios::out | ios::binary);
       if (!output.is_open())
         {
           cerr << "Error: Can't open file " << filename << " for writing" << endl;
@@ -3260,7 +3260,7 @@ DynamicModel::writeOutput(ostream &output, const string &basename, bool block_de
           ofstream KF_index_file;
           boost::filesystem::create_directories(basename + "/model/bytecode");
           string main_name = basename + "/model/bytecode/kfi";
-          KF_index_file.open(main_name.c_str(), ios::out | ios::binary | ios::ate);
+          KF_index_file.open(main_name, ios::out | ios::binary | ios::ate);
           int n_obs = symbol_table.observedVariablesNbr();
           int n_state = state_var.size();
           for (vector<int>::const_iterator it = state_var.begin(); it != state_var.end(); it++)
@@ -4369,7 +4369,7 @@ DynamicModel::writeSetAuxiliaryVariables(const string &basename, const bool juli
   string comment = julia ? "#" : "%";
 
   ofstream output;
-  output.open(filename.c_str(), ios::out | ios::binary);
+  output.open(filename, ios::out | ios::binary);
   if (!output.is_open())
     {
       cerr << "ERROR: Can't open file " << filename << " for writing" << endl;
@@ -5014,7 +5014,7 @@ DynamicModel::writeParamsDerivativesFile(const string &basename, bool julia) con
 
   string filename = julia ? basename + "DynamicParamsDerivs.jl" : packageDir(basename) + "/dynamic_params_derivs.m";
   ofstream paramsDerivsFile;
-  paramsDerivsFile.open(filename.c_str(), ios::out | ios::binary);
+  paramsDerivsFile.open(filename, ios::out | ios::binary);
   if (!paramsDerivsFile.is_open())
     {
       cerr << "ERROR: Can't open file " << filename << " for writing" << endl;
@@ -5729,7 +5729,7 @@ DynamicModel::isChecksumMatching(const string &basename) const
   // read old checksum if it exists
   if (basename_dir_exists)
     {
-      checksum_file.open(filename.c_str(), ios::in | ios::binary);
+      checksum_file.open(filename, ios::in | ios::binary);
       if (checksum_file.is_open())
         {
           checksum_file >> old_checksum;
@@ -5739,7 +5739,7 @@ DynamicModel::isChecksumMatching(const string &basename) const
   // write new checksum file if none or different from old checksum
   if (old_checksum != result.checksum())
     {
-      checksum_file.open(filename.c_str(), ios::out | ios::binary);
+      checksum_file.open(filename, ios::out | ios::binary);
       if (!checksum_file.is_open())
         {
           cerr << "ERROR: Can't open file " << filename << endl;
@@ -5851,7 +5851,7 @@ DynamicModel::writeResidualsC(const string &basename, bool cuda) const
   string filename = basename + "_residuals.c";
   ofstream mDynamicModelFile, mDynamicMexFile;
 
-  mDynamicModelFile.open(filename.c_str(), ios::out | ios::binary);
+  mDynamicModelFile.open(filename, ios::out | ios::binary);
   if (!mDynamicModelFile.is_open())
     {
       cerr << "Error: Can't open file " << filename << " for writing" << endl;
@@ -5904,7 +5904,7 @@ DynamicModel::writeFirstDerivativesC(const string &basename, bool cuda) const
   string filename = basename + "_first_derivatives.c";
   ofstream mDynamicModelFile, mDynamicMexFile;
 
-  mDynamicModelFile.open(filename.c_str(), ios::out | ios::binary);
+  mDynamicModelFile.open(filename, ios::out | ios::binary);
   if (!mDynamicModelFile.is_open())
     {
       cerr << "Error: Can't open file " << filename << " for writing" << endl;
@@ -5963,7 +5963,7 @@ DynamicModel::writeFirstDerivativesC_csr(const string &basename, bool cuda) cons
   string filename = basename + "_first_derivatives.c";
   ofstream mDynamicModelFile, mDynamicMexFile;
 
-  mDynamicModelFile.open(filename.c_str(), ios::out | ios::binary);
+  mDynamicModelFile.open(filename, ios::out | ios::binary);
   if (!mDynamicModelFile.is_open())
     {
       cerr << "Error: Can't open file " << filename << " for writing" << endl;
@@ -6066,7 +6066,7 @@ DynamicModel::writeSecondDerivativesC_csr(const string &basename, bool cuda) con
   string filename = basename + "_second_derivatives.c";
   ofstream mDynamicModelFile, mDynamicMexFile;
 
-  mDynamicModelFile.open(filename.c_str(), ios::out | ios::binary);
+  mDynamicModelFile.open(filename, ios::out | ios::binary);
   if (!mDynamicModelFile.is_open())
     {
       cerr << "Error: Can't open file " << filename << " for writing" << endl;
@@ -6160,7 +6160,7 @@ DynamicModel::writeThirdDerivativesC_csr(const string &basename, bool cuda) cons
   string filename = basename + "_third_derivatives.c";
   ofstream mDynamicModelFile, mDynamicMexFile;
 
-  mDynamicModelFile.open(filename.c_str(), ios::out | ios::binary);
+  mDynamicModelFile.open(filename, ios::out | ios::binary);
   if (!mDynamicModelFile.is_open())
     {
       cerr << "Error: Can't open file " << filename << " for writing" << endl;
diff --git a/src/DynareMain1.cc b/src/DynareMain1.cc
index c801fd86d8c9b840675e34e863bb49175b681c3a..cc66a4c334b2a866b3d265bce3961691544ec241 100644
--- a/src/DynareMain1.cc
+++ b/src/DynareMain1.cc
@@ -38,7 +38,7 @@ main1(string &modfile, string &basename, string &modfiletxt, bool debug, bool sa
     {
       if (save_macro_file.empty())
         save_macro_file = basename + "-macroexp.mod";
-      ofstream macro_output_file(save_macro_file.c_str());
+      ofstream macro_output_file(save_macro_file);
       if (macro_output_file.fail())
         {
           cerr << "Cannot open " << save_macro_file << " for macro output" << endl;
diff --git a/src/ModFile.cc b/src/ModFile.cc
index 1c5e3a31902a4799703d014dbc4863a3edc91733..3b7476d38df6ab842ff06a16ba93899f39b17e55 100644
--- a/src/ModFile.cc
+++ b/src/ModFile.cc
@@ -762,7 +762,7 @@ ModFile::writeOutputFiles(const string &basename, bool clear_all, bool clear_glo
     {
       boost::filesystem::create_directory("+" + basename);
       string fname = "+" + basename + "/driver.m";
-      mOutputFile.open(fname.c_str(), ios::out | ios::binary);
+      mOutputFile.open(fname, ios::out | ios::binary);
       if (!mOutputFile.is_open())
         {
           cerr << "ERROR: Can't open file " << fname << " for writing" << endl;
@@ -1099,7 +1099,7 @@ ModFile::writeModelC(const string &basename) const
   string filename = basename + ".c";
 
   ofstream mDriverCFile;
-  mDriverCFile.open(filename.c_str(), ios::out | ios::binary);
+  mDriverCFile.open(filename, ios::out | ios::binary);
   if (!mDriverCFile.is_open())
     {
       cerr << "Error: Can't open file " << filename << " for writing" << endl;
@@ -1144,7 +1144,7 @@ ModFile::writeModelC(const string &basename) const
     {
       string fname(basename);
       fname += ".m";
-      mOutputFile.open(fname.c_str(), ios::out | ios::binary);
+      mOutputFile.open(fname, ios::out | ios::binary);
       if (!mOutputFile.is_open())
         {
           cerr << "ERROR: Can't open file " << fname
@@ -1203,7 +1203,7 @@ ModFile::writeModelCC(const string &basename) const
   string filename = basename + ".cc";
 
   ofstream mDriverCFile;
-  mDriverCFile.open(filename.c_str(), ios::out | ios::binary);
+  mDriverCFile.open(filename, ios::out | ios::binary);
   if (!mDriverCFile.is_open())
     {
       cerr << "Error: Can't open file " << filename << " for writing" << endl;
@@ -1248,7 +1248,7 @@ ModFile::writeModelCC(const string &basename) const
     {
       string fname(basename);
       fname += ".m";
-      mOutputFile.open(fname.c_str(), ios::out | ios::binary);
+      mOutputFile.open(fname, ios::out | ios::binary);
       if (!mOutputFile.is_open())
         {
           cerr << "ERROR: Can't open file " << fname
@@ -1280,7 +1280,7 @@ ModFile::writeExternalFilesJulia(const string &basename, FileOutputType output,
     {
       string fname(basename);
       fname += ".jl";
-      jlOutputFile.open(fname.c_str(), ios::out | ios::binary);
+      jlOutputFile.open(fname, ios::out | ios::binary);
       if (!jlOutputFile.is_open())
         {
           cerr << "ERROR: Can't open file " << fname
@@ -1514,7 +1514,7 @@ ModFile::writeJsonOutputParsingCheck(const string &basename, JsonFileOutputType
         {
           string fname(basename);
           fname += ".json";
-          jsonOutputFile.open(fname.c_str(), ios::out | ios::binary);
+          jsonOutputFile.open(fname, ios::out | ios::binary);
           if (!jsonOutputFile.is_open())
             {
               cerr << "ERROR: Can't open file " << fname << " for writing" << endl;
@@ -1536,7 +1536,7 @@ ModFile::writeJsonOutputParsingCheck(const string &basename, JsonFileOutputType
             {
               string fname(basename);
               fname += "_original.json";
-              jsonOutputFile.open(fname.c_str(), ios::out | ios::binary);
+              jsonOutputFile.open(fname, ios::out | ios::binary);
               if (!jsonOutputFile.is_open())
                 {
                   cerr << "ERROR: Can't open file " << fname << " for writing" << endl;
@@ -1558,7 +1558,7 @@ ModFile::writeJsonOutputParsingCheck(const string &basename, JsonFileOutputType
             {
               string fname(basename);
               fname += "_steady_state_model.json";
-              jsonOutputFile.open(fname.c_str(), ios::out | ios::binary);
+              jsonOutputFile.open(fname, ios::out | ios::binary);
               if (!jsonOutputFile.is_open())
                 {
                   cerr << "ERROR: Can't open file " << fname << " for writing" << endl;
@@ -1648,7 +1648,7 @@ void
 ModFile::writeJsonFileHelper(string &fname, ostringstream &output) const
 {
   ofstream jsonOutput;
-  jsonOutput.open(fname.c_str(), ios::out | ios::binary);
+  jsonOutput.open(fname, ios::out | ios::binary);
   if (!jsonOutput.is_open())
     {
       cerr << "ERROR: Can't open file " << fname << " for writing" << endl;
diff --git a/src/ModelTree.cc b/src/ModelTree.cc
index c6a1be2ac8d5e5ef5dc5493a3fae8e3f790bf694..c9c950449f3c8f3d750b9d8c9e6d6e6a611e4dda 100644
--- a/src/ModelTree.cc
+++ b/src/ModelTree.cc
@@ -1652,14 +1652,14 @@ ModelTree::writeLatexModelFile(const string &basename, ExprNodeOutputType output
   string filename = basename + ".tex";
   string content_basename = basename + "_content";
   string content_filename = content_basename + ".tex";
-  output.open(filename.c_str(), ios::out | ios::binary);
+  output.open(filename, ios::out | ios::binary);
   if (!output.is_open())
     {
       cerr << "ERROR: Can't open file " << filename << " for writing" << endl;
       exit(EXIT_FAILURE);
     }
 
-  content_output.open(content_filename.c_str(), ios::out | ios::binary);
+  content_output.open(content_filename, ios::out | ios::binary);
   if (!content_output.is_open())
     {
       cerr << "ERROR: Can't open file " << content_filename << " for writing" << endl;
diff --git a/src/NumericalInitialization.cc b/src/NumericalInitialization.cc
index 2f93f9d0a9badb9a15778357942cf15044139ea0..b720bda8d2df5c121a6a5ddb61fae195b14b5b68 100644
--- a/src/NumericalInitialization.cc
+++ b/src/NumericalInitialization.cc
@@ -556,7 +556,7 @@ LoadParamsAndSteadyStateStatement::LoadParamsAndSteadyStateStatement(const strin
   cout << "Reading " << filename << "." << endl;
 
   ifstream f;
-  f.open(filename.c_str(), ios::in);
+  f.open(filename, ios::in);
   if (f.fail())
     {
       cerr << "ERROR: Can't open " << filename << endl;
diff --git a/src/StaticModel.cc b/src/StaticModel.cc
index 59ae0821ca7c1249b565f38e255779a3d05de4df..f13e0f09c44b52c6883e35fc6a2715416896d0fd 100644
--- a/src/StaticModel.cc
+++ b/src/StaticModel.cc
@@ -218,7 +218,7 @@ StaticModel::writeModelEquationsOrdered_M(const string &basename) const
 
       tmp1_output.str("");
       tmp1_output << packageDir(basename + ".block") << "/static_" << block+1 << ".m";
-      output.open(tmp1_output.str().c_str(), ios::out | ios::binary);
+      output.open(tmp1_output.str(), ios::out | ios::binary);
       output << "%\n";
       output << "% " << tmp1_output.str() << " : Computes static model for Dynare\n";
       output << "%\n";
@@ -402,7 +402,7 @@ StaticModel::writeModelEquationsCode(const string &basename, map_idx_t map_idx)
   boost::filesystem::create_directories(basename + "/model/bytecode");
 
   string main_name = basename + "/model/bytecode/static.cod";
-  code_file.open(main_name.c_str(), ios::out | ios::binary | ios::ate);
+  code_file.open(main_name, ios::out | ios::binary | ios::ate);
   if (!code_file.is_open())
     {
       cerr << "Error : Can't open file \"" << main_name << "\" for writing" << endl;
@@ -584,7 +584,7 @@ StaticModel::writeModelEquationsCode_Block(const string &basename, map_idx_t map
   boost::filesystem::create_directories(basename + "/model/bytecode");
 
   string main_name = basename + "/model/bytecode/static.cod";
-  code_file.open(main_name.c_str(), ios::out | ios::binary | ios::ate);
+  code_file.open(main_name, ios::out | ios::binary | ios::ate);
   if (!code_file.is_open())
     {
       cerr << "Error : Can't open file \"" << main_name << "\" for writing" << endl;
@@ -1167,7 +1167,7 @@ StaticModel::writeWrapperFunctions(const string &basename, const string &ending)
 
   string filename = packageDir(basename) + "/" + name + ".m";
   ofstream output;
-  output.open(filename.c_str(), ios::out | ios::binary);
+  output.open(filename, ios::out | ios::binary);
   if (!output.is_open())
     {
       cerr << "Error: Can't open file " << filename << " for writing" << endl;
@@ -1216,7 +1216,7 @@ StaticModel::writeStaticModelHelper(const string &basename,
 {
   string filename = packageDir(basename) + "/" + name_tt + ".m";
   ofstream output;
-  output.open(filename.c_str(), ios::out | ios::binary);
+  output.open(filename, ios::out | ios::binary);
   if (!output.is_open())
     {
       cerr << "Error: Can't open file " << filename << " for writing" << endl;
@@ -1248,7 +1248,7 @@ StaticModel::writeStaticModelHelper(const string &basename,
   output.close();
 
   filename = packageDir(basename) + "/" + name + ".m";
-  output.open(filename.c_str(), ios::out | ios::binary);
+  output.open(filename, ios::out | ios::binary);
   if (!output.is_open())
     {
       cerr << "Error: Can't open file " << filename << " for writing" << endl;
@@ -1289,7 +1289,7 @@ StaticModel::writeStaticMatlabCompatLayer(const string &basename) const
 {
   string filename = packageDir(basename) + "/static.m";
   ofstream output;
-  output.open(filename.c_str(), ios::out | ios::binary);
+  output.open(filename, ios::out | ios::binary);
   if (!output.is_open())
     {
       cerr << "Error: Can't open file " << filename << " for writing" << endl;
@@ -1654,7 +1654,7 @@ StaticModel::writeStaticModel(const string &basename,
     {
       string filename = basename + "Static.jl";
       ofstream output;
-      output.open(filename.c_str(), ios::out | ios::binary);
+      output.open(filename, ios::out | ios::binary);
       if (!output.is_open())
         {
           cerr << "Error: Can't open file " << filename << " for writing" << endl;
@@ -1870,7 +1870,7 @@ StaticModel::writeStaticCFile(const string &basename) const
   string filename_mex = basename + "/model/src/static_mex.c";
 
   ofstream output;
-  output.open(filename.c_str(), ios::out | ios::binary);
+  output.open(filename, ios::out | ios::binary);
   if (!output.is_open())
     {
       cerr << "ERROR: Can't open file " << filename << " for writing" << endl;
@@ -1911,7 +1911,7 @@ StaticModel::writeStaticCFile(const string &basename) const
   writeNormcdf(output);
   output.close();
 
-  output.open(filename_mex.c_str(), ios::out | ios::binary);
+  output.open(filename_mex, ios::out | ios::binary);
   if (!output.is_open())
     {
       cerr << "ERROR: Can't open file " << filename_mex << " for writing" << endl;
@@ -2021,7 +2021,7 @@ StaticModel::writeStaticBlockMFSFile(const string &basename) const
   string filename = packageDir(basename) + "/static.m";
 
   ofstream output;
-  output.open(filename.c_str(), ios::out | ios::binary);
+  output.open(filename, ios::out | ios::binary);
   if (!output.is_open())
     {
       cerr << "ERROR: Can't open file " << filename << " for writing" << endl;
@@ -2375,7 +2375,7 @@ StaticModel::writeSetAuxiliaryVariables(const string &basename, const bool julia
   string comment = julia ? "#" : "%";
 
   ofstream output;
-  output.open(filename.c_str(), ios::out | ios::binary);
+  output.open(filename, ios::out | ios::binary);
   if (!output.is_open())
     {
       cerr << "ERROR: Can't open file " << filename << " for writing" << endl;
@@ -2592,7 +2592,7 @@ StaticModel::writeParamsDerivativesFile(const string &basename, bool julia) cons
 
   ofstream paramsDerivsFile;
   string filename = julia ? basename + "StaticParamsDerivs.jl" : packageDir(basename) + "/static_params_derivs.m";
-  paramsDerivsFile.open(filename.c_str(), ios::out | ios::binary);
+  paramsDerivsFile.open(filename, ios::out | ios::binary);
   if (!paramsDerivsFile.is_open())
     {
       cerr << "ERROR: Can't open file " << filename << " for writing" << endl;
diff --git a/src/SteadyStateModel.cc b/src/SteadyStateModel.cc
index 185fae14c845ae50f74a6d8eafbf138957f1938a..326a64c1016438fee748c120b1cf0515b84fc2d0 100644
--- a/src/SteadyStateModel.cc
+++ b/src/SteadyStateModel.cc
@@ -111,14 +111,14 @@ SteadyStateModel::writeLatexSteadyStateFile(const string &basename) const
   string content_basename = basename + "_steady_state_content";
   string content_filename = content_basename + ".tex";
 
-  output.open(filename.c_str(), ios::out | ios::binary);
+  output.open(filename, ios::out | ios::binary);
   if (!output.is_open())
     {
       cerr << "ERROR: Can't open file " << filename << " for writing" << endl;
       exit(EXIT_FAILURE);
     }
 
-  content_output.open(content_filename.c_str(), ios::out | ios::binary);
+  content_output.open(content_filename, ios::out | ios::binary);
   if (!content_output.is_open())
     {
       cerr << "ERROR: Can't open file " << content_filename << " for writing" << endl;
@@ -161,7 +161,7 @@ SteadyStateModel::writeSteadyStateFile(const string &basename, bool ramsey_model
 
   string filename = julia ? basename + "SteadyState2.jl" : packageDir(basename) + "/steadystate.m";
   ofstream output;
-  output.open(filename.c_str(), ios::out | ios::binary);
+  output.open(filename, ios::out | ios::binary);
   if (!output.is_open())
     {
       cerr << "ERROR: Can't open file " << filename << " for writing" << endl;
@@ -226,7 +226,7 @@ SteadyStateModel::writeSteadyStateFileC(const string &basename, bool ramsey_mode
   string filename = basename + "_steadystate.c";
 
   ofstream output;
-  output.open(filename.c_str(), ios::out | ios::binary);
+  output.open(filename, ios::out | ios::binary);
   if (!output.is_open())
     {
       cerr << "ERROR: Can't open file " << filename << " for writing" << endl;
diff --git a/src/macro/MacroFlex.ll b/src/macro/MacroFlex.ll
index d4d31939f62052a136f770c387ea09373ce5ddca..2a5f088fd6b23a58b5089490c755f6bb57bcd0b9 100644
--- a/src/macro/MacroFlex.ll
+++ b/src/macro/MacroFlex.ll
@@ -485,7 +485,7 @@ MacroFlex::create_include_context(string *filename, Macro::parser::location_type
 #endif
   save_context(yylloc);
   // Open new file
-  input = new ifstream(filename->c_str(), ios::binary);
+  input = new ifstream(*filename, ios::binary);
   if (input->fail())
     {
       ostringstream dirs;
@@ -493,7 +493,7 @@ MacroFlex::create_include_context(string *filename, Macro::parser::location_type
       for (vector<string>::const_iterator it = path.begin(); it != path.end(); it++)
         {
           string testfile = *it + FILESEP + *filename;
-          input = new ifstream(testfile.c_str(), ios::binary);
+          input = new ifstream(testfile, ios::binary);
           if (input->good())
             break;
           dirs << *it << endl;