diff --git a/include/ceres/gradient_problem_solver.h b/include/ceres/gradient_problem_solver.h
index 0676d92..1ed1e4a 100644
--- a/include/ceres/gradient_problem_solver.h
+++ b/include/ceres/gradient_problem_solver.h
@@ -81,7 +81,7 @@
     // Returns true if the options struct has a valid
     // configuration. Returns false otherwise, and fills in *error
     // with a message describing the problem.
-    bool IsValid(string* error) const;
+    bool IsValid(std::string* error) const;
 
     // Minimizer options ----------------------------------------
     LineSearchDirectionType line_search_direction_type;
@@ -269,11 +269,11 @@
 
     // A brief one line description of the state of the solver after
     // termination.
-    string BriefReport() const;
+    std::string BriefReport() const;
 
     // A full multiline description of the state of the solver after
     // termination.
-    string FullReport() const;
+    std::string FullReport() const;
 
     bool IsSolutionUsable() const;
 
@@ -281,7 +281,7 @@
     TerminationType termination_type;
 
     // Reason why the solver terminated.
-    string message;
+    std::string message;
 
     // Cost of the problem (value of the objective function) before
     // the optimization.
diff --git a/include/ceres/internal/port.h b/include/ceres/internal/port.h
index 24eca05..6cee7ba 100644
--- a/include/ceres/internal/port.h
+++ b/include/ceres/internal/port.h
@@ -34,8 +34,6 @@
 // This file needs to compile as c code.
 #ifdef __cplusplus
 
-#include <string>
-
 #include "ceres/internal/config.h"
 
 #if defined(CERES_TR1_MEMORY_HEADER)
@@ -46,10 +44,6 @@
 
 namespace ceres {
 
-// This is necessary to properly handle the case that there is a different
-// "string" implementation in the global namespace.
-using std::string;
-
 #if defined(CERES_TR1_SHARED_PTR)
 using std::tr1::shared_ptr;
 #else
diff --git a/include/ceres/solver.h b/include/ceres/solver.h
index dc06151..cfa2974 100644
--- a/include/ceres/solver.h
+++ b/include/ceres/solver.h
@@ -141,7 +141,7 @@
     // Returns true if the options struct has a valid
     // configuration. Returns false otherwise, and fills in *error
     // with a message describing the problem.
-    bool IsValid(string* error) const;
+    bool IsValid(std::string* error) const;
 
     // Minimizer options ----------------------------------------
 
@@ -683,7 +683,7 @@
     // non-empty if trust_region_minimizer_iterations_to_dump is
     // non-empty and trust_region_problem_dump_format_type is not
     // CONSOLE.
-    string trust_region_problem_dump_directory;
+    std::string trust_region_problem_dump_directory;
     DumpFormatType trust_region_problem_dump_format_type;
 
     // Finite differences options ----------------------------------------------
@@ -755,11 +755,11 @@
 
     // A brief one line description of the state of the solver after
     // termination.
-    string BriefReport() const;
+    std::string BriefReport() const;
 
     // A full multiline description of the state of the solver after
     // termination.
-    string FullReport() const;
+    std::string FullReport() const;
 
     bool IsSolutionUsable() const;
 
@@ -769,7 +769,7 @@
     TerminationType termination_type;
 
     // Reason why the solver terminated.
-    string message;
+    std::string message;
 
     // Cost of the problem (value of the objective function) before
     // the optimization.
diff --git a/include/ceres/types.h b/include/ceres/types.h
index 8915188..c9ee34c 100644
--- a/include/ceres/types.h
+++ b/include/ceres/types.h
@@ -416,65 +416,65 @@
 
 CERES_EXPORT const char* LinearSolverTypeToString(
     LinearSolverType type);
-CERES_EXPORT bool StringToLinearSolverType(string value,
+CERES_EXPORT bool StringToLinearSolverType(std::string value,
                                            LinearSolverType* type);
 
 CERES_EXPORT const char* PreconditionerTypeToString(PreconditionerType type);
-CERES_EXPORT bool StringToPreconditionerType(string value,
+CERES_EXPORT bool StringToPreconditionerType(std::string value,
                                              PreconditionerType* type);
 
 CERES_EXPORT const char* VisibilityClusteringTypeToString(
     VisibilityClusteringType type);
-CERES_EXPORT bool StringToVisibilityClusteringType(string value,
+CERES_EXPORT bool StringToVisibilityClusteringType(std::string value,
                                       VisibilityClusteringType* type);
 
 CERES_EXPORT const char* SparseLinearAlgebraLibraryTypeToString(
     SparseLinearAlgebraLibraryType type);
 CERES_EXPORT bool StringToSparseLinearAlgebraLibraryType(
-    string value,
+    std::string value,
     SparseLinearAlgebraLibraryType* type);
 
 CERES_EXPORT const char* DenseLinearAlgebraLibraryTypeToString(
     DenseLinearAlgebraLibraryType type);
 CERES_EXPORT bool StringToDenseLinearAlgebraLibraryType(
-    string value,
+    std::string value,
     DenseLinearAlgebraLibraryType* type);
 
 CERES_EXPORT const char* TrustRegionStrategyTypeToString(
     TrustRegionStrategyType type);
-CERES_EXPORT bool StringToTrustRegionStrategyType(string value,
+CERES_EXPORT bool StringToTrustRegionStrategyType(std::string value,
                                      TrustRegionStrategyType* type);
 
 CERES_EXPORT const char* DoglegTypeToString(DoglegType type);
-CERES_EXPORT bool StringToDoglegType(string value, DoglegType* type);
+CERES_EXPORT bool StringToDoglegType(std::string value, DoglegType* type);
 
 CERES_EXPORT const char* MinimizerTypeToString(MinimizerType type);
-CERES_EXPORT bool StringToMinimizerType(string value, MinimizerType* type);
+CERES_EXPORT bool StringToMinimizerType(std::string value, MinimizerType* type);
 
 CERES_EXPORT const char* LineSearchDirectionTypeToString(
     LineSearchDirectionType type);
-CERES_EXPORT bool StringToLineSearchDirectionType(string value,
+CERES_EXPORT bool StringToLineSearchDirectionType(std::string value,
                                      LineSearchDirectionType* type);
 
 CERES_EXPORT const char* LineSearchTypeToString(LineSearchType type);
-CERES_EXPORT bool StringToLineSearchType(string value, LineSearchType* type);
+CERES_EXPORT bool StringToLineSearchType(std::string value, LineSearchType* type);
 
 CERES_EXPORT const char* NonlinearConjugateGradientTypeToString(
     NonlinearConjugateGradientType type);
 CERES_EXPORT bool StringToNonlinearConjugateGradientType(
-    string value,
+    std::string value,
     NonlinearConjugateGradientType* type);
 
 CERES_EXPORT const char* LineSearchInterpolationTypeToString(
     LineSearchInterpolationType type);
 CERES_EXPORT bool StringToLineSearchInterpolationType(
-    string value,
+    std::string value,
     LineSearchInterpolationType* type);
 
 CERES_EXPORT const char* CovarianceAlgorithmTypeToString(
     CovarianceAlgorithmType type);
 CERES_EXPORT bool StringToCovarianceAlgorithmType(
-    string value,
+    std::string value,
     CovarianceAlgorithmType* type);
 
 CERES_EXPORT const char* TerminationTypeToString(TerminationType type);
diff --git a/internal/ceres/array_utils.cc b/internal/ceres/array_utils.cc
index a22eb61..3eb5ea4 100644
--- a/internal/ceres/array_utils.cc
+++ b/internal/ceres/array_utils.cc
@@ -41,6 +41,8 @@
 namespace ceres {
 namespace internal {
 
+using std::string;
+
 // It is a near impossibility that user code generates this exact
 // value in normal operation, thus we will use it to fill arrays
 // before passing them to user code. If on return an element of the
diff --git a/internal/ceres/array_utils.h b/internal/ceres/array_utils.h
index c11129e..55b53d2 100644
--- a/internal/ceres/array_utils.h
+++ b/internal/ceres/array_utils.h
@@ -64,7 +64,7 @@
 
 // Utility routine to print an array of doubles to a string. If the
 // array pointer is NULL, it is treated as an array of zeros.
-void AppendArrayToString(const int size, const double* x, string* result);
+void AppendArrayToString(const int size, const double* x, std::string* result);
 
 extern const double kImpossibleValue;
 
diff --git a/internal/ceres/callbacks.cc b/internal/ceres/callbacks.cc
index 3858309..9a2a313 100644
--- a/internal/ceres/callbacks.cc
+++ b/internal/ceres/callbacks.cc
@@ -37,6 +37,8 @@
 namespace ceres {
 namespace internal {
 
+using std::string;
+
 StateUpdatingCallback::StateUpdatingCallback(Program* program,
                                              double* parameters)
     : program_(program), parameters_(parameters) {}
diff --git a/internal/ceres/coordinate_descent_minimizer.cc b/internal/ceres/coordinate_descent_minimizer.cc
index 9f14840..b949c00 100644
--- a/internal/ceres/coordinate_descent_minimizer.cc
+++ b/internal/ceres/coordinate_descent_minimizer.cc
@@ -54,6 +54,7 @@
 
 using std::map;
 using std::set;
+using std::string;
 using std::vector;
 
 CoordinateDescentMinimizer::~CoordinateDescentMinimizer() {
diff --git a/internal/ceres/coordinate_descent_minimizer.h b/internal/ceres/coordinate_descent_minimizer.h
index 7aed5d3..25b9024 100644
--- a/internal/ceres/coordinate_descent_minimizer.h
+++ b/internal/ceres/coordinate_descent_minimizer.h
@@ -60,7 +60,7 @@
   bool Init(const Program& program,
             const ProblemImpl::ParameterMap& parameter_map,
             const ParameterBlockOrdering& ordering,
-            string* error);
+            std::string* error);
 
   // Minimizer interface.
   virtual ~CoordinateDescentMinimizer();
@@ -71,7 +71,7 @@
   // Verify that each group in the ordering forms an independent set.
   static bool IsOrderingValid(const Program& program,
                               const ParameterBlockOrdering& ordering,
-                              string* message);
+                              std::string* message);
 
   // Find a recursive decomposition of the Hessian matrix as a set
   // of independent sets of decreasing size and invert it. This
diff --git a/internal/ceres/evaluator.cc b/internal/ceres/evaluator.cc
index c94c62c..4675c4a 100644
--- a/internal/ceres/evaluator.cc
+++ b/internal/ceres/evaluator.cc
@@ -50,7 +50,7 @@
 
 Evaluator* Evaluator::Create(const Evaluator::Options& options,
                              Program* program,
-                             string* error) {
+                             std::string* error) {
   switch (options.linear_solver_type) {
     case DENSE_QR:
     case DENSE_NORMAL_CHOLESKY:
diff --git a/internal/ceres/evaluator.h b/internal/ceres/evaluator.h
index 7fec1ee..52c7d8c 100644
--- a/internal/ceres/evaluator.h
+++ b/internal/ceres/evaluator.h
@@ -72,7 +72,7 @@
 
   static Evaluator* Create(const Options& options,
                            Program* program,
-                           string* error);
+                           std::string* error);
 
   // This is used for computing the cost, residual and Jacobian for
   // returning to the user. For actually solving the optimization
@@ -190,12 +190,12 @@
   // that the base class implementation does not have to worry about
   // life time issues. Further, these calls are not expected to be
   // frequent or performance sensitive.
-  virtual std::map<string, int> CallStatistics() const {
-    return std::map<string, int>();
+  virtual std::map<std::string, int> CallStatistics() const {
+    return std::map<std::string, int>();
   }
 
-  virtual std::map<string, double> TimeStatistics() const {
-    return std::map<string, double>();
+  virtual std::map<std::string, double> TimeStatistics() const {
+    return std::map<std::string, double>();
   }
 };
 
diff --git a/internal/ceres/evaluator_test.cc b/internal/ceres/evaluator_test.cc
index ddfafd9..de24274 100644
--- a/internal/ceres/evaluator_test.cc
+++ b/internal/ceres/evaluator_test.cc
@@ -51,6 +51,7 @@
 namespace ceres {
 namespace internal {
 
+using std::string;
 using std::vector;
 
 // TODO(keir): Consider pushing this into a common test utils file.
diff --git a/internal/ceres/execution_summary.h b/internal/ceres/execution_summary.h
index 3f684f9..e25f2c9 100644
--- a/internal/ceres/execution_summary.h
+++ b/internal/ceres/execution_summary.h
@@ -46,30 +46,30 @@
 // can be used for reporting times associated with various activities.
 class ExecutionSummary {
  public:
-  void IncrementTimeBy(const string& name, const double value) {
+  void IncrementTimeBy(const std::string& name, const double value) {
     CeresMutexLock l(&times_mutex_);
     times_[name] += value;
   }
 
-  void IncrementCall(const string& name) {
+  void IncrementCall(const std::string& name) {
     CeresMutexLock l(&calls_mutex_);
     calls_[name] += 1;
   }
 
-  const std::map<string, double>& times() const { return times_; }
-  const std::map<string, int>& calls() const { return calls_; }
+  const std::map<std::string, double>& times() const { return times_; }
+  const std::map<std::string, int>& calls() const { return calls_; }
 
  private:
   Mutex times_mutex_;
-  std::map<string, double> times_;
+  std::map<std::string, double> times_;
 
   Mutex calls_mutex_;
-  std::map<string, int> calls_;
+  std::map<std::string, int> calls_;
 };
 
 class ScopedExecutionTimer {
  public:
-  ScopedExecutionTimer(const string& name, ExecutionSummary* summary)
+  ScopedExecutionTimer(const std::string& name, ExecutionSummary* summary)
       : start_time_(WallTimeInSeconds()),
         name_(name),
         summary_(summary) {}
@@ -80,7 +80,7 @@
 
  private:
   const double start_time_;
-  const string name_;
+  const std::string name_;
   ExecutionSummary* summary_;
 };
 
diff --git a/internal/ceres/file.h b/internal/ceres/file.h
index 4741d65..858b662 100644
--- a/internal/ceres/file.h
+++ b/internal/ceres/file.h
@@ -39,12 +39,13 @@
 namespace ceres {
 namespace internal {
 
-void WriteStringToFileOrDie(const string &data, const string &filename);
-void ReadFileToStringOrDie(const string &filename, string *data);
+void WriteStringToFileOrDie(const std::string &data,
+                            const std::string &filename);
+void ReadFileToStringOrDie(const std::string &filename, std::string *data);
 
 // Join two path components, adding a slash if necessary.  If basename is an
 // absolute path then JoinPath ignores dirname and simply returns basename.
-string JoinPath(const string& dirname, const string& basename);
+std::string JoinPath(const std::string& dirname, const std::string& basename);
 
 }  // namespace internal
 }  // namespace ceres
diff --git a/internal/ceres/gradient_checking_cost_function.cc b/internal/ceres/gradient_checking_cost_function.cc
index 52b649b..0ac3fe6 100644
--- a/internal/ceres/gradient_checking_cost_function.cc
+++ b/internal/ceres/gradient_checking_cost_function.cc
@@ -52,6 +52,7 @@
 namespace ceres {
 namespace internal {
 
+using std::string;
 using std::vector;
 
 namespace {
diff --git a/internal/ceres/gradient_checking_cost_function.h b/internal/ceres/gradient_checking_cost_function.h
index d49c8e6..0fa6fb7 100644
--- a/internal/ceres/gradient_checking_cost_function.h
+++ b/internal/ceres/gradient_checking_cost_function.h
@@ -61,7 +61,7 @@
     const CostFunction* cost_function,
     double relative_step_size,
     double relative_precision,
-    const string& extra_info);
+    const std::string& extra_info);
 
 // Create a new ProblemImpl object from the input problem_impl, where
 // each CostFunctions in problem_impl are wrapped inside a
diff --git a/internal/ceres/gradient_problem_evaluator.h b/internal/ceres/gradient_problem_evaluator.h
index 7d144e3..3cdb0dd 100644
--- a/internal/ceres/gradient_problem_evaluator.h
+++ b/internal/ceres/gradient_problem_evaluator.h
@@ -79,11 +79,11 @@
 
   virtual int NumResiduals() const { return 1; }
 
-  virtual std::map<string, int> CallStatistics() const {
+  virtual std::map<std::string, int> CallStatistics() const {
     return execution_summary_.calls();
   }
 
-  virtual std::map<string, double> TimeStatistics() const {
+  virtual std::map<std::string, double> TimeStatistics() const {
     return execution_summary_.times();
   }
 
diff --git a/internal/ceres/gradient_problem_solver.cc b/internal/ceres/gradient_problem_solver.cc
index aea0804..78e509f 100644
--- a/internal/ceres/gradient_problem_solver.cc
+++ b/internal/ceres/gradient_problem_solver.cc
@@ -46,6 +46,7 @@
 namespace ceres {
 using internal::StringPrintf;
 using internal::StringAppendF;
+using std::string;
 
 namespace {
 
diff --git a/internal/ceres/lapack.cc b/internal/ceres/lapack.cc
index a3d9980..6cf2f6b 100644
--- a/internal/ceres/lapack.cc
+++ b/internal/ceres/lapack.cc
@@ -70,7 +70,7 @@
     int num_rows,
     const double* in_lhs,
     double* rhs_and_solution,
-    string* message) {
+    std::string* message) {
 #ifdef CERES_NO_LAPACK
   LOG(FATAL) << "Ceres was built without a BLAS library.";
   return LINEAR_SOLVER_FATAL_ERROR;
@@ -151,7 +151,7 @@
     int work_size,
     double* work,
     double* rhs_and_solution,
-    string* message) {
+    std::string* message) {
 #ifdef CERES_NO_LAPACK
   LOG(FATAL) << "Ceres was built without a LAPACK library.";
   return LINEAR_SOLVER_FATAL_ERROR;
diff --git a/internal/ceres/lapack.h b/internal/ceres/lapack.h
index 8933c2c..f1b7676 100644
--- a/internal/ceres/lapack.h
+++ b/internal/ceres/lapack.h
@@ -58,7 +58,7 @@
       int num_rows,
       const double* lhs,
       double* rhs_and_solution,
-      string* message);
+      std::string* message);
 
   // The SolveUsingQR function requires a buffer for its temporary
   // computation. This function given the size of the lhs matrix will
@@ -91,7 +91,7 @@
       int work_size,
       double* work,
       double* rhs_and_solution,
-      string* message);
+      std::string* message);
 };
 
 }  // namespace internal
diff --git a/internal/ceres/line_search.cc b/internal/ceres/line_search.cc
index d9343c9..d7d6576 100644
--- a/internal/ceres/line_search.cc
+++ b/internal/ceres/line_search.cc
@@ -47,6 +47,7 @@
 
 using std::map;
 using std::ostream;
+using std::string;
 using std::vector;
 
 namespace {
diff --git a/internal/ceres/line_search.h b/internal/ceres/line_search.h
index ea72f74..ccbfd58 100644
--- a/internal/ceres/line_search.h
+++ b/internal/ceres/line_search.h
@@ -179,7 +179,7 @@
     // the next candidate step size across all iterations.
     double polynomial_minimization_time_in_seconds;
     double total_time_in_seconds;
-    string error;
+    std::string error;
   };
 
   explicit LineSearch(const LineSearch::Options& options);
@@ -187,7 +187,7 @@
 
   static LineSearch* Create(const LineSearchType line_search_type,
                             const LineSearch::Options& options,
-                            string* error);
+                            std::string* error);
 
   // Perform the line search.
   //
diff --git a/internal/ceres/line_search_minimizer.cc b/internal/ceres/line_search_minimizer.cc
index 85cc031..f5059e8 100644
--- a/internal/ceres/line_search_minimizer.cc
+++ b/internal/ceres/line_search_minimizer.cc
@@ -69,7 +69,7 @@
 bool Evaluate(Evaluator* evaluator,
               const Vector& x,
               LineSearchMinimizer::State* state,
-              string* message) {
+              std::string* message) {
   if (!evaluator->Evaluate(x.data(),
                            &(state->cost),
                            NULL,
diff --git a/internal/ceres/line_search_preprocessor.cc b/internal/ceres/line_search_preprocessor.cc
index bf17dee..9f4dac5 100644
--- a/internal/ceres/line_search_preprocessor.cc
+++ b/internal/ceres/line_search_preprocessor.cc
@@ -42,7 +42,7 @@
 namespace internal {
 namespace {
 
-bool IsProgramValid(const Program& program, string* error) {
+bool IsProgramValid(const Program& program, std::string* error) {
   if (program.IsBoundsConstrained()) {
     *error = "LINE_SEARCH Minimizer does not support bounds.";
     return false;
diff --git a/internal/ceres/linear_least_squares_problems.cc b/internal/ceres/linear_least_squares_problems.cc
index b6a6a8c..31209f9 100644
--- a/internal/ceres/linear_least_squares_problems.cc
+++ b/internal/ceres/linear_least_squares_problems.cc
@@ -46,6 +46,8 @@
 namespace ceres {
 namespace internal {
 
+using std::string;
+
 LinearLeastSquaresProblem* CreateLinearLeastSquaresProblemFromId(int id) {
   switch (id) {
     case 0:
diff --git a/internal/ceres/linear_least_squares_problems.h b/internal/ceres/linear_least_squares_problems.h
index fdeed70..a8619f6 100644
--- a/internal/ceres/linear_least_squares_problems.h
+++ b/internal/ceres/linear_least_squares_problems.h
@@ -71,7 +71,7 @@
 
 // Write the linear least squares problem to disk. The exact format
 // depends on dump_format_type.
-bool DumpLinearLeastSquaresProblem(const string& filename_base,
+bool DumpLinearLeastSquaresProblem(const std::string& filename_base,
                                    DumpFormatType dump_format_type,
                                    const SparseMatrix* A,
                                    const double* D,
diff --git a/internal/ceres/linear_solver.h b/internal/ceres/linear_solver.h
index 14f171c..de44bca 100644
--- a/internal/ceres/linear_solver.h
+++ b/internal/ceres/linear_solver.h
@@ -273,7 +273,7 @@
     double residual_norm;
     int num_iterations;
     LinearSolverTerminationType termination_type;
-    string message;
+    std::string message;
   };
 
   // If the optimization problem is such that there are no remaining
@@ -296,12 +296,12 @@
   // that the base class implementation does not have to worry about
   // life time issues. Further, these calls are not expected to be
   // frequent or performance sensitive.
-  virtual std::map<string, int> CallStatistics() const {
-    return std::map<string, int>();
+  virtual std::map<std::string, int> CallStatistics() const {
+    return std::map<std::string, int>();
   }
 
-  virtual std::map<string, double> TimeStatistics() const {
-    return std::map<string, double>();
+  virtual std::map<std::string, double> TimeStatistics() const {
+    return std::map<std::string, double>();
   }
 
   // Factory
@@ -331,11 +331,11 @@
     return SolveImpl(down_cast<MatrixType*>(A), b, per_solve_options, x);
   }
 
-  virtual std::map<string, int> CallStatistics() const {
+  virtual std::map<std::string, int> CallStatistics() const {
     return execution_summary_.calls();
   }
 
-  virtual std::map<string, double> TimeStatistics() const {
+  virtual std::map<std::string, double> TimeStatistics() const {
     return execution_summary_.times();
   }
 
diff --git a/internal/ceres/minimizer.h b/internal/ceres/minimizer.h
index 24c8e67..ef696d2 100644
--- a/internal/ceres/minimizer.h
+++ b/internal/ceres/minimizer.h
@@ -134,7 +134,7 @@
     int max_consecutive_nonmonotonic_steps;
     std::vector<int> trust_region_minimizer_iterations_to_dump;
     DumpFormatType trust_region_problem_dump_format_type;
-    string trust_region_problem_dump_directory;
+    std::string trust_region_problem_dump_directory;
     int max_num_consecutive_invalid_steps;
     double min_trust_region_radius;
     LineSearchDirectionType line_search_direction_type;
diff --git a/internal/ceres/parameter_block.h b/internal/ceres/parameter_block.h
index 1ef8673..3ece270 100644
--- a/internal/ceres/parameter_block.h
+++ b/internal/ceres/parameter_block.h
@@ -237,7 +237,7 @@
     return true;
   }
 
-  string ToString() const {
+  std::string ToString() const {
     return StringPrintf("{ user_state=%p, state=%p, size=%d, "
                         "constant=%d, index=%d, state_offset=%d, "
                         "delta_offset=%d }",
diff --git a/internal/ceres/polynomial.cc b/internal/ceres/polynomial.cc
index 848fbee..361ab68 100644
--- a/internal/ceres/polynomial.cc
+++ b/internal/ceres/polynomial.cc
@@ -43,6 +43,7 @@
 namespace ceres {
 namespace internal {
 
+using std::string;
 using std::vector;
 
 namespace {
diff --git a/internal/ceres/polynomial.h b/internal/ceres/polynomial.h
index aaa4401..d5816e5 100644
--- a/internal/ceres/polynomial.h
+++ b/internal/ceres/polynomial.h
@@ -96,7 +96,7 @@
         gradient(0.0),
         gradient_is_valid(false) {
   }
-  string ToDebugString() const;
+  std::string ToDebugString() const;
 
   double x;
   double value;      // value = f(x)
diff --git a/internal/ceres/preprocessor.h b/internal/ceres/preprocessor.h
index 5269eeb..312dab6 100644
--- a/internal/ceres/preprocessor.h
+++ b/internal/ceres/preprocessor.h
@@ -84,7 +84,7 @@
       : fixed_cost(0.0) {
   }
 
-  string error;
+  std::string error;
   Solver::Options options;
   LinearSolver::Options linear_solver_options;
   Evaluator::Options evaluator_options;
diff --git a/internal/ceres/problem_impl.cc b/internal/ceres/problem_impl.cc
index a363248..ee1e32e 100644
--- a/internal/ceres/problem_impl.cc
+++ b/internal/ceres/problem_impl.cc
@@ -55,9 +55,9 @@
 namespace ceres {
 namespace internal {
 
-using std::vector;
 using std::map;
-
+using std::string;
+using std::vector;
 typedef std::map<double*, internal::ParameterBlock*> ParameterMap;
 
 namespace {
diff --git a/internal/ceres/program.cc b/internal/ceres/program.cc
index 77bc63a..131802f 100644
--- a/internal/ceres/program.cc
+++ b/internal/ceres/program.cc
@@ -51,6 +51,7 @@
 namespace internal {
 
 using std::set;
+using std::string;
 using std::vector;
 
 Program::Program() {}
diff --git a/internal/ceres/program.h b/internal/ceres/program.h
index 54dc271..8f82cd3 100644
--- a/internal/ceres/program.h
+++ b/internal/ceres/program.h
@@ -105,7 +105,7 @@
   // offsets) are correct.
   bool IsValid() const;
 
-  bool ParameterBlocksAreFinite(string* message) const;
+  bool ParameterBlocksAreFinite(std::string* message) const;
 
   // Returns true if the program has any non-constant parameter blocks
   // which have non-trivial bounds constraints.
@@ -114,7 +114,7 @@
   // Returns false, if the program has any constant parameter blocks
   // which are not feasible, or any variable parameter blocks which
   // have a lower bound greater than or equal to the upper bound.
-  bool IsFeasible(string* message) const;
+  bool IsFeasible(std::string* message) const;
 
   // Loop over each residual block and ensure that no two parameter
   // blocks in the same residual block are part of
@@ -145,7 +145,7 @@
   // the problem.
   Program* CreateReducedProgram(std::vector<double*>* removed_parameter_blocks,
                                 double* fixed_cost,
-                                string* error) const;
+                                std::string* error) const;
 
   // See problem.h for what these do.
   int NumParameterBlocks() const;
@@ -161,7 +161,7 @@
 
   // A human-readable dump of the parameter blocks for debugging.
   // TODO(keir): If necessary, also dump the residual blocks.
-  string ToString() const;
+  std::string ToString() const;
 
  private:
   // Remove constant parameter blocks and residual blocks with no
@@ -177,7 +177,7 @@
   // error will contain a human readable description of the problem.
   bool RemoveFixedBlocks(std::vector<double*>* removed_parameter_blocks,
                          double* fixed_cost,
-                         string* message);
+                         std::string* message);
 
   // The Program does not own the ParameterBlock or ResidualBlock objects.
   std::vector<ParameterBlock*> parameter_blocks_;
diff --git a/internal/ceres/program_evaluator.h b/internal/ceres/program_evaluator.h
index 24ed3ae..00724fe 100644
--- a/internal/ceres/program_evaluator.h
+++ b/internal/ceres/program_evaluator.h
@@ -297,11 +297,11 @@
     return program_->NumResiduals();
   }
 
-  virtual std::map<string, int> CallStatistics() const {
+  virtual std::map<std::string, int> CallStatistics() const {
     return execution_summary_.calls();
   }
 
-  virtual std::map<string, double> TimeStatistics() const {
+  virtual std::map<std::string, double> TimeStatistics() const {
     return execution_summary_.times();
   }
 
diff --git a/internal/ceres/program_test.cc b/internal/ceres/program_test.cc
index 77a1c44..26ca683 100644
--- a/internal/ceres/program_test.cc
+++ b/internal/ceres/program_test.cc
@@ -42,6 +42,7 @@
 namespace ceres {
 namespace internal {
 
+using std::string;
 using std::vector;
 
 // A cost function that simply returns its argument.
diff --git a/internal/ceres/reorder_program.cc b/internal/ceres/reorder_program.cc
index fad69f9..d1c1df4 100644
--- a/internal/ceres/reorder_program.cc
+++ b/internal/ceres/reorder_program.cc
@@ -59,6 +59,7 @@
 
 using std::map;
 using std::set;
+using std::string;
 using std::vector;
 
 namespace {
diff --git a/internal/ceres/reorder_program.h b/internal/ceres/reorder_program.h
index 0474c1f..1275fd6 100644
--- a/internal/ceres/reorder_program.h
+++ b/internal/ceres/reorder_program.h
@@ -46,14 +46,14 @@
 bool ApplyOrdering(const ProblemImpl::ParameterMap& parameter_map,
                    const ParameterBlockOrdering& ordering,
                    Program* program,
-                   string* error);
+                   std::string* error);
 
 // Reorder the residuals for program, if necessary, so that the residuals
 // involving each E block occur together. This is a necessary condition for the
 // Schur eliminator, which works on these "row blocks" in the jacobian.
 bool LexicographicallyOrderResidualBlocks(int size_of_first_elimination_group,
                                           Program* program,
-                                          string* error);
+                                          std::string* error);
 
 // Schur type solvers require that all parameter blocks eliminated
 // by the Schur eliminator occur before others and the residuals be
@@ -77,7 +77,7 @@
     const ProblemImpl::ParameterMap& parameter_map,
     ParameterBlockOrdering* parameter_block_ordering,
     Program* program,
-    string* error);
+    std::string* error);
 
 // Sparse cholesky factorization routines when doing the sparse
 // cholesky factorization of the Jacobian matrix, reorders its
@@ -93,7 +93,7 @@
     SparseLinearAlgebraLibraryType sparse_linear_algebra_library_type,
     const ParameterBlockOrdering& parameter_block_ordering,
     Program* program,
-    string* error);
+    std::string* error);
 
 }  // namespace internal
 }  // namespace ceres
diff --git a/internal/ceres/reorder_program_test.cc b/internal/ceres/reorder_program_test.cc
index 6f2b1b0..74b4a1d 100644
--- a/internal/ceres/reorder_program_test.cc
+++ b/internal/ceres/reorder_program_test.cc
@@ -105,7 +105,7 @@
   Program* program = problem.mutable_program();
   program->SetParameterOffsetsAndIndex();
 
-  string message;
+  std::string message;
   EXPECT_TRUE(LexicographicallyOrderResidualBlocks(
                   2,
                   problem.mutable_program(),
@@ -131,7 +131,7 @@
   linear_solver_ordering.AddElementToGroup(&y, 1);
 
   Program program(problem.program());
-  string message;
+  std::string message;
   EXPECT_FALSE(ApplyOrdering(problem.parameter_map(),
                              linear_solver_ordering,
                              &program,
@@ -154,7 +154,7 @@
   linear_solver_ordering.AddElementToGroup(&z, 1);
 
   Program* program = problem.mutable_program();
-  string message;
+  std::string message;
 
   EXPECT_TRUE(ApplyOrdering(problem.parameter_map(),
                             linear_solver_ordering,
diff --git a/internal/ceres/residual_block.cc b/internal/ceres/residual_block.cc
index 5eb2117..c2a11c7 100644
--- a/internal/ceres/residual_block.cc
+++ b/internal/ceres/residual_block.cc
@@ -117,7 +117,7 @@
                          cost,
                          residuals,
                          eval_jacobians)) {
-    string message =
+    std::string message =
         "\n\n"
         "Error in evaluating the ResidualBlock.\n\n"
         "There are two possible reasons. Either the CostFunction did not evaluate and fill all    \n"  // NOLINT
diff --git a/internal/ceres/residual_block.h b/internal/ceres/residual_block.h
index b936064..82fa0bf 100644
--- a/internal/ceres/residual_block.h
+++ b/internal/ceres/residual_block.h
@@ -127,7 +127,7 @@
   int index() const { return index_; }
   void set_index(int index) { index_ = index; }
 
-  string ToString() {
+  std::string ToString() {
     return StringPrintf("{residual block; index=%d}", index_);
   }
 
diff --git a/internal/ceres/residual_block_utils.cc b/internal/ceres/residual_block_utils.cc
index d2564a7..9bd8f6b 100644
--- a/internal/ceres/residual_block_utils.cc
+++ b/internal/ceres/residual_block_utils.cc
@@ -44,6 +44,8 @@
 namespace ceres {
 namespace internal {
 
+using std::string;
+
 void InvalidateEvaluation(const ResidualBlock& block,
                           double* cost,
                           double* residuals,
diff --git a/internal/ceres/residual_block_utils.h b/internal/ceres/residual_block_utils.h
index 7051c21..6574f5b 100644
--- a/internal/ceres/residual_block_utils.h
+++ b/internal/ceres/residual_block_utils.h
@@ -68,11 +68,11 @@
 // Create a string representation of the Residual block containing the
 // value of the parameters, residuals and jacobians if present.
 // Useful for debugging output.
-string EvaluationToString(const ResidualBlock& block,
-                          double const* const* parameters,
-                          double* cost,
-                          double* residuals,
-                          double** jacobians);
+std::string EvaluationToString(const ResidualBlock& block,
+                               double const* const* parameters,
+                               double* cost,
+                               double* residuals,
+                               double** jacobians);
 
 }  // namespace internal
 }  // namespace ceres
diff --git a/internal/ceres/rotation_test.cc b/internal/ceres/rotation_test.cc
index ef1adf7..1cf0236 100644
--- a/internal/ceres/rotation_test.cc
+++ b/internal/ceres/rotation_test.cc
@@ -503,7 +503,7 @@
   LOG(INFO) << "Rotation:";
   LOG(INFO) << "EXPECTED        |        ACTUAL";
   for (int i = 0; i < 3; ++i) {
-    string line;
+    std::string line;
     for (int j = 0; j < 3; ++j) {
       StringAppendF(&line, "%g ", kMatrix[i][j]);
     }
diff --git a/internal/ceres/solver.cc b/internal/ceres/solver.cc
index b60efd9..c6414b5 100644
--- a/internal/ceres/solver.cc
+++ b/internal/ceres/solver.cc
@@ -49,8 +49,9 @@
 namespace ceres {
 namespace {
 
-using std::vector;
 using std::map;
+using std::string;
+using std::vector;
 
 #define OPTION_OP(x, y, OP)                                             \
   if (!(options.x OP y)) {                                              \
diff --git a/internal/ceres/solver_test.cc b/internal/ceres/solver_test.cc
index e4abdef..4882fc2 100644
--- a/internal/ceres/solver_test.cc
+++ b/internal/ceres/solver_test.cc
@@ -43,6 +43,8 @@
 namespace ceres {
 namespace internal {
 
+using std::string;
+
 TEST(SolverOptions, DefaultTrustRegionOptionsAreValid) {
   Solver::Options options;
   options.minimizer_type = TRUST_REGION;
diff --git a/internal/ceres/solver_utils.cc b/internal/ceres/solver_utils.cc
index 86440eb..39619e7 100644
--- a/internal/ceres/solver_utils.cc
+++ b/internal/ceres/solver_utils.cc
@@ -37,8 +37,8 @@
 namespace ceres {
 namespace internal {
 
-string VersionString() {
-  string value = string(CERES_VERSION_STRING);
+std::string VersionString() {
+  std::string value = std::string(CERES_VERSION_STRING);
 
 #ifdef CERES_NO_LAPACK
   value += "-no_lapack";
diff --git a/internal/ceres/solver_utils.h b/internal/ceres/solver_utils.h
index 2d1edf8..412d342 100644
--- a/internal/ceres/solver_utils.h
+++ b/internal/ceres/solver_utils.h
@@ -55,7 +55,7 @@
   }
 }
 
-string VersionString();
+std::string VersionString();
 
 }  // namespace internal
 }  // namespace ceres
diff --git a/internal/ceres/split.cc b/internal/ceres/split.cc
index 0afe1c5..4d2930a 100644
--- a/internal/ceres/split.cc
+++ b/internal/ceres/split.cc
@@ -39,6 +39,7 @@
 namespace ceres {
 namespace internal {
 
+using std::string;
 using std::vector;
 
 // If we know how much to allocate for a vector of strings, we can allocate the
diff --git a/internal/ceres/split.h b/internal/ceres/split.h
index ada6676..1945b4f 100644
--- a/internal/ceres/split.h
+++ b/internal/ceres/split.h
@@ -41,8 +41,8 @@
 // Split a string using one or more character delimiters, presented as a
 // nul-terminated c string. Append the components to 'result'. If there are
 // consecutive delimiters, this function skips over all of them.
-void SplitStringUsing(const string& full, const char* delim,
-                      std::vector<string>* res);
+void SplitStringUsing(const std::string& full, const char* delim,
+                      std::vector<std::string>* res);
 
 }  // namespace internal
 }  // namespace ceres
diff --git a/internal/ceres/stringprintf.cc b/internal/ceres/stringprintf.cc
index 0f85f05..aca599f 100644
--- a/internal/ceres/stringprintf.cc
+++ b/internal/ceres/stringprintf.cc
@@ -41,6 +41,8 @@
 namespace ceres {
 namespace internal {
 
+using std::string;
+
 #ifdef _MSC_VER
 enum { IS_COMPILER_MSVC = 1 };
 #if _MSC_VER < 1800
diff --git a/internal/ceres/stringprintf.h b/internal/ceres/stringprintf.h
index cd1be14..b2b20da 100644
--- a/internal/ceres/stringprintf.h
+++ b/internal/ceres/stringprintf.h
@@ -63,23 +63,23 @@
 #endif
 
 // Return a C++ string.
-extern string StringPrintf(const char* format, ...)
+extern std::string StringPrintf(const char* format, ...)
     // Tell the compiler to do printf format string checking.
     CERES_PRINTF_ATTRIBUTE(1, 2);
 
 // Store result into a supplied string and return it.
-extern const string& SStringPrintf(string* dst, const char* format, ...)
+extern const std::string& SStringPrintf(std::string* dst, const char* format, ...)
     // Tell the compiler to do printf format string checking.
     CERES_PRINTF_ATTRIBUTE(2, 3);
 
 // Append result to a supplied string.
-extern void StringAppendF(string* dst, const char* format, ...)
+extern void StringAppendF(std::string* dst, const char* format, ...)
     // Tell the compiler to do printf format string checking.
     CERES_PRINTF_ATTRIBUTE(2, 3);
 
 // Lower-level routine that takes a va_list and appends to a specified string.
 // All other routines are just convenience wrappers around it.
-extern void StringAppendV(string* dst, const char* format, va_list ap);
+extern void StringAppendV(std::string* dst, const char* format, va_list ap);
 
 #undef CERES_PRINTF_ATTRIBUTE
 
diff --git a/internal/ceres/suitesparse.cc b/internal/ceres/suitesparse.cc
index d8b1a49..c49af3c 100644
--- a/internal/ceres/suitesparse.cc
+++ b/internal/ceres/suitesparse.cc
@@ -44,6 +44,7 @@
 namespace ceres {
 namespace internal {
 
+using std::string;
 using std::vector;
 
 SuiteSparse::SuiteSparse() {
diff --git a/internal/ceres/suitesparse.h b/internal/ceres/suitesparse.h
index 5aa9cb9..c42492e 100644
--- a/internal/ceres/suitesparse.h
+++ b/internal/ceres/suitesparse.h
@@ -143,12 +143,12 @@
   // message contains an explanation of the failures if any.
   //
   // Caller owns the result.
-  cholmod_factor* AnalyzeCholesky(cholmod_sparse* A, string* message);
+  cholmod_factor* AnalyzeCholesky(cholmod_sparse* A, std::string* message);
 
   cholmod_factor* BlockAnalyzeCholesky(cholmod_sparse* A,
                                        const std::vector<int>& row_blocks,
                                        const std::vector<int>& col_blocks,
-                                       string* message);
+                                       std::string* message);
 
   // If A is symmetric, then compute the symbolic Cholesky
   // factorization of A(ordering, ordering). If A is unsymmetric, then
@@ -164,7 +164,7 @@
   cholmod_factor* AnalyzeCholeskyWithUserOrdering(
       cholmod_sparse* A,
       const std::vector<int>& ordering,
-      string* message);
+      std::string* message);
 
   // Perform a symbolic factorization of A without re-ordering A. No
   // postordering of the elimination tree is performed. This ensures
@@ -173,7 +173,7 @@
   //
   // message contains an explanation of the failures if any.
   cholmod_factor* AnalyzeCholeskyWithNaturalOrdering(cholmod_sparse* A,
-                                                     string* message);
+                                                     std::string* message);
 
   // Use the symbolic factorization in L, to find the numerical
   // factorization for the matrix A or AA^T. Return true if
@@ -183,14 +183,14 @@
   // message contains an explanation of the failures if any.
   LinearSolverTerminationType Cholesky(cholmod_sparse* A,
                                        cholmod_factor* L,
-                                       string* message);
+                                       std::string* message);
 
   // Given a Cholesky factorization of a matrix A = LL^T, solve the
   // linear system Ax = b, and return the result. If the Solve fails
   // NULL is returned. Caller owns the result.
   //
   // message contains an explanation of the failures if any.
-  cholmod_dense* Solve(cholmod_factor* L, cholmod_dense* b, string* message);
+  cholmod_dense* Solve(cholmod_factor* L, cholmod_dense* b, std::string* message);
 
   // By virtue of the modeling layer in Ceres being block oriented,
   // all the matrices used by Ceres are also block oriented. When
@@ -260,15 +260,15 @@
   void Free(cholmod_dense* m)  { cholmod_free_dense(&m, &cc_);  }
   void Free(cholmod_factor* m) { cholmod_free_factor(&m, &cc_); }
 
-  void Print(cholmod_sparse* m, const string& name) {
+  void Print(cholmod_sparse* m, const std::string& name) {
     cholmod_print_sparse(m, const_cast<char*>(name.c_str()), &cc_);
   }
 
-  void Print(cholmod_dense* m, const string& name) {
+  void Print(cholmod_dense* m, const std::string& name) {
     cholmod_print_dense(m, const_cast<char*>(name.c_str()), &cc_);
   }
 
-  void Print(cholmod_triplet* m, const string& name) {
+  void Print(cholmod_triplet* m, const std::string& name) {
     cholmod_print_triplet(m, const_cast<char*>(name.c_str()), &cc_);
   }
 
diff --git a/internal/ceres/system_test.cc b/internal/ceres/system_test.cc
index 54fd30a..a365e52 100644
--- a/internal/ceres/system_test.cc
+++ b/internal/ceres/system_test.cc
@@ -60,6 +60,7 @@
 namespace ceres {
 namespace internal {
 
+using std::string;
 using std::vector;
 
 const bool kAutomaticOrdering = true;
diff --git a/internal/ceres/test_util.cc b/internal/ceres/test_util.cc
index 9d252e9..7758381 100644
--- a/internal/ceres/test_util.cc
+++ b/internal/ceres/test_util.cc
@@ -120,7 +120,7 @@
   }
 }
 
-string TestFileAbsolutePath(const string& filename) {
+std::string TestFileAbsolutePath(const std::string& filename) {
   return JoinPath(FLAGS_test_srcdir + CERES_TEST_SRCDIR_SUFFIX,
                   filename);
 }
diff --git a/internal/ceres/test_util.h b/internal/ceres/test_util.h
index 4c530de..c3703ac 100644
--- a/internal/ceres/test_util.h
+++ b/internal/ceres/test_util.h
@@ -63,7 +63,7 @@
 
 // Construct a fully qualified path for the test file depending on the
 // local build/testing environment.
-string TestFileAbsolutePath(const string& filename);
+std::string TestFileAbsolutePath(const std::string& filename);
 
 }  // namespace internal
 }  // namespace ceres
diff --git a/internal/ceres/trust_region_minimizer.cc b/internal/ceres/trust_region_minimizer.cc
index 0a6ce80..2f6fcc4 100644
--- a/internal/ceres/trust_region_minimizer.cc
+++ b/internal/ceres/trust_region_minimizer.cc
@@ -85,7 +85,7 @@
       options.max_line_search_step_expansion;
   line_search_options.function = &line_search_function;
 
-  string message;
+  std::string message;
   scoped_ptr<LineSearch> line_search(
       CHECK_NOTNULL(LineSearch::Create(ceres::ARMIJO,
                                        line_search_options,
diff --git a/internal/ceres/trust_region_preprocessor.cc b/internal/ceres/trust_region_preprocessor.cc
index 129442c..305eff8 100644
--- a/internal/ceres/trust_region_preprocessor.cc
+++ b/internal/ceres/trust_region_preprocessor.cc
@@ -67,7 +67,7 @@
 
 // Check if all the user supplied values in the parameter blocks are
 // sane or not, and if the program is feasible or not.
-bool IsProgramValid(const Program& program, string* error) {
+bool IsProgramValid(const Program& program, std::string* error) {
   return (program.ParameterBlocksAreFinite(error) &&
           program.IsFeasible(error));
 }
@@ -84,7 +84,7 @@
   options->linear_solver_type = LinearSolver::LinearSolverForZeroEBlocks(
       linear_solver_type_given);
 
-  string message;
+  std::string message;
   if (linear_solver_type_given == ITERATIVE_SCHUR) {
     options->preconditioner_type = Preconditioner::PreconditionerForZeroEBlocks(
         preconditioner_type_given);
diff --git a/internal/ceres/trust_region_strategy.h b/internal/ceres/trust_region_strategy.h
index 998514f..cd70ef7 100644
--- a/internal/ceres/trust_region_strategy.h
+++ b/internal/ceres/trust_region_strategy.h
@@ -98,7 +98,7 @@
     // name starting with dump_filename_base.  If dump_format_type is
     // CONSOLE then dump_filename_base will be ignored and the linear
     // system will be written to the standard error.
-    string dump_filename_base;
+    std::string dump_filename_base;
     DumpFormatType dump_format_type;
   };
 
diff --git a/internal/ceres/types.cc b/internal/ceres/types.cc
index 52bd67d..7217c69 100644
--- a/internal/ceres/types.cc
+++ b/internal/ceres/types.cc
@@ -36,6 +36,8 @@
 
 namespace ceres {
 
+using std::string;
+
 #define CASESTR(x) case x: return #x
 #define STRENUM(x) if (value == #x) { *type = x; return true;}
 
diff --git a/internal/ceres/visibility_based_preconditioner.cc b/internal/ceres/visibility_based_preconditioner.cc
index 125856e..3659d9d 100644
--- a/internal/ceres/visibility_based_preconditioner.cc
+++ b/internal/ceres/visibility_based_preconditioner.cc
@@ -445,7 +445,7 @@
   lhs->stype = 1;
 
   // TODO(sameeragarwal): Refactor to pipe this up and out.
-  string status;
+  std::string status;
 
   // Symbolic factorization is computed if we don't already have one handy.
   if (factor_ == NULL) {
@@ -470,7 +470,7 @@
   const int num_rows = m_->num_rows();
   memcpy(CHECK_NOTNULL(tmp_rhs_)->x, x, m_->num_rows() * sizeof(*x));
   // TODO(sameeragarwal): Better error handling.
-  string status;
+  std::string status;
   cholmod_dense* solution =
       CHECK_NOTNULL(ss->Solve(factor_, tmp_rhs_, &status));
   memcpy(y, solution->x, sizeof(*y) * num_rows);
diff --git a/internal/ceres/wall_time.cc b/internal/ceres/wall_time.cc
index 85c4417..22594d7 100644
--- a/internal/ceres/wall_time.cc
+++ b/internal/ceres/wall_time.cc
@@ -59,7 +59,7 @@
 #endif
 }
 
-EventLogger::EventLogger(const string& logger_name)
+EventLogger::EventLogger(const std::string& logger_name)
     : start_time_(WallTimeInSeconds()),
       last_event_time_(start_time_),
       events_("") {
@@ -75,7 +75,7 @@
   }
 }
 
-void EventLogger::AddEvent(const string& event_name) {
+void EventLogger::AddEvent(const std::string& event_name) {
   if (!VLOG_IS_ON(3)) {
     return;
   }
diff --git a/internal/ceres/wall_time.h b/internal/ceres/wall_time.h
index 37f5568..faffa56 100644
--- a/internal/ceres/wall_time.h
+++ b/internal/ceres/wall_time.h
@@ -72,14 +72,14 @@
 //     Total:  time3  time1 + time2 + time3;
 class EventLogger {
  public:
-  explicit EventLogger(const string& logger_name);
+  explicit EventLogger(const std::string& logger_name);
   ~EventLogger();
-  void AddEvent(const string& event_name);
+  void AddEvent(const std::string& event_name);
 
  private:
   const double start_time_;
   double last_event_time_;
-  string events_;
+  std::string events_;
 };
 
 }  // namespace internal
