diff --git a/src/main/cpp/blaze.cc b/src/main/cpp/blaze.cc
index b314f23..caa95b2 100644
--- a/src/main/cpp/blaze.cc
+++ b/src/main/cpp/blaze.cc
@@ -304,7 +304,7 @@
 
   if (!globals->options.batch) {
     result.push_back("--max_idle_secs");
-    result.push_back(std::to_string(globals->options.max_idle_secs));
+    result.push_back(ToString(globals->options.max_idle_secs));
   } else {
     // --batch must come first in the arguments to Java main() because
     // the code expects it to be at args[0] if it's been set.
@@ -333,7 +333,7 @@
   }
   if (globals->options.webstatus_port) {
     result.push_back("--use_webstatusserver=" + \
-                     std::to_string(globals->options.webstatus_port));
+                     ToString(globals->options.webstatus_port));
   }
 
   // This is only for Blaze reporting purposes; the real interpretation of the
@@ -369,14 +369,14 @@
 
 // Add commom command options for logging to the given argument array.
 static void AddLoggingArgs(vector<string>* args) {
-  args->push_back("--startup_time=" + std::to_string(globals->startup_time));
+  args->push_back("--startup_time=" + ToString(globals->startup_time));
   if (globals->command_wait_time != 0) {
     args->push_back("--command_wait_time=" +
-                    std::to_string(globals->command_wait_time));
+                    ToString(globals->command_wait_time));
   }
   if (globals->extract_data_time != 0) {
     args->push_back("--extract_data_time=" +
-                    std::to_string(globals->extract_data_time));
+                    ToString(globals->extract_data_time));
   }
   if (globals->restart_reason != NO_RESTART) {
     const char *reasons[] = {
@@ -896,7 +896,7 @@
     uint64_t st = MonotonicClock();
     // Work in a temp dir to avoid races.
     string tmp_install = globals->options.install_base + ".tmp." +
-        std::to_string(getpid());
+        ToString(getpid());
     string tmp_binaries = tmp_install + "/_embedded_binaries";
     ActuallyExtractData(self_path, tmp_binaries);
 
@@ -1483,7 +1483,7 @@
   ftruncate(globals->lockfd, 0);
   const char *tty = ttyname(STDIN_FILENO);  // NOLINT (single-threaded)
   string msg = "owner=" + globals->options.GetProductName() + " launcher\npid="
-      + std::to_string(getpid()) + "\ntty=" + (tty ? tty : "") + "\n";
+      + ToString(getpid()) + "\ntty=" + (tty ? tty : "") + "\n";
   // Don't bother checking for error, since it's unlikely and unimportant.
   // The contents are currently meant only for debugging.
   write(globals->lockfd, msg.data(), msg.size());
diff --git a/src/main/cpp/blaze_util.h b/src/main/cpp/blaze_util.h
index 9d53d7d..4cf6dc9 100644
--- a/src/main/cpp/blaze_util.h
+++ b/src/main/cpp/blaze_util.h
@@ -21,6 +21,7 @@
 
 #include <sys/types.h>
 
+#include <sstream>
 #include <string>
 #include <vector>
 
@@ -103,6 +104,16 @@
 bool CheckJavaVersionIsAtLeast(const string &jvm_version,
                                const string &version_spec);
 
+// Converts a project identifier to string.
+// Workaround for mingw where std::to_string is not implemented.
+// See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52015.
+template <typename T>
+string ToString(const T& value) {
+  std::ostringstream oss;
+  oss << value;
+  return oss.str();
+}
+
 }  // namespace blaze
 
 #endif  // BAZEL_SRC_MAIN_CPP_BLAZE_UTIL_H_
diff --git a/src/main/cpp/blaze_util_linux.cc b/src/main/cpp/blaze_util_linux.cc
index e18a853..8f0218a 100644
--- a/src/main/cpp/blaze_util_linux.cc
+++ b/src/main/cpp/blaze_util_linux.cc
@@ -132,7 +132,7 @@
 string GetProcessCWD(int pid) {
   char server_cwd[PATH_MAX] = {};
   if (readlink(
-          ("/proc/" + std::to_string(pid) + "/cwd").c_str(),
+          ("/proc/" + ToString(pid) + "/cwd").c_str(),
           server_cwd, sizeof(server_cwd)) < 0) {
     return "";
   }
diff --git a/src/main/cpp/blaze_util_mingw.cc b/src/main/cpp/blaze_util_mingw.cc
index f9eab3c..9c3ba8a 100644
--- a/src/main/cpp/blaze_util_mingw.cc
+++ b/src/main/cpp/blaze_util_mingw.cc
@@ -85,7 +85,7 @@
 string GetProcessCWD(int pid) {
   char server_cwd[PATH_MAX] = {};
   if (readlink(
-          ("/proc/" + std::to_string(pid) + "/cwd").c_str(),
+          ("/proc/" + ToString(pid) + "/cwd").c_str(),
           server_cwd, sizeof(server_cwd)) < 0) {
     return "";
   }
diff --git a/src/main/cpp/option_processor.cc b/src/main/cpp/option_processor.cc
index a46a721..5f4fd2a 100644
--- a/src/main/cpp/option_processor.cc
+++ b/src/main/cpp/option_processor.cc
@@ -446,16 +446,16 @@
     for (int ii = 0; ii < it->second.size(); ii++) {
       const RcOption& rcoption = it->second[ii];
       command_arguments_.push_back(
-          "--default_override=" + std::to_string(rcoption.rcfile_index()) + ":"
+          "--default_override=" + ToString(rcoption.rcfile_index()) + ":"
           + it->first + "=" + rcoption.option());
     }
   }
 
   // Splice the terminal options.
   command_arguments_.push_back(
-      "--isatty=" + std::to_string(IsStandardTerminal()));
+      "--isatty=" + ToString(IsStandardTerminal()));
   command_arguments_.push_back(
-      "--terminal_columns=" + std::to_string(GetTerminalColumns()));
+      "--terminal_columns=" + ToString(GetTerminalColumns()));
 
   // Pass the client environment to the server in server mode.
   if (batch) {
