diff --git a/src/base/command_line.cc b/src/base/command_line.cc
index ea4bbda..ba9a6b0 100644
--- a/src/base/command_line.cc
+++ b/src/base/command_line.cc
@@ -283,7 +283,7 @@
 #endif
 }
 
-bool CommandLine::HasSwitch(const std::string_view& switch_string) const {
+bool CommandLine::HasSwitch(std::string_view switch_string) const {
   DCHECK_EQ(ToLowerASCII(switch_string), switch_string);
   return ContainsKey(switches_, switch_string);
 }
@@ -293,7 +293,7 @@
 }
 
 std::string CommandLine::GetSwitchValueASCII(
-    const std::string_view& switch_string) const {
+    std::string_view switch_string) const {
   StringType value = GetSwitchValueNative(switch_string);
   if (!IsStringASCII(value)) {
     DLOG(WARNING) << "Value of switch (" << switch_string << ") must be ASCII.";
@@ -306,13 +306,12 @@
 #endif
 }
 
-FilePath CommandLine::GetSwitchValuePath(
-    const std::string_view& switch_string) const {
+FilePath CommandLine::GetSwitchValuePath(std::string_view switch_string) const {
   return FilePath(GetSwitchValueNative(switch_string));
 }
 
 CommandLine::StringType CommandLine::GetSwitchValueNative(
-    const std::string_view& switch_string) const {
+    std::string_view switch_string) const {
   DCHECK_EQ(ToLowerASCII(switch_string), switch_string);
   auto result = switches_.find(switch_string);
   return result == switches_.end() ? StringType() : result->second;
diff --git a/src/base/command_line.h b/src/base/command_line.h
index 46c1fcc..3a44346 100644
--- a/src/base/command_line.h
+++ b/src/base/command_line.h
@@ -164,15 +164,15 @@
   // The second override provides an optimized version to avoid inlining codegen
   // at every callsite to find the length of the constant and construct a
   // std::string_view.
-  bool HasSwitch(const std::string_view& switch_string) const;
+  bool HasSwitch(std::string_view switch_string) const;
   bool HasSwitch(const char switch_constant[]) const;
 
   // Returns the value associated with the given switch. If the switch has no
   // value or isn't present, this method returns the empty string.
   // Switch names must be lowercase.
-  std::string GetSwitchValueASCII(const std::string_view& switch_string) const;
-  FilePath GetSwitchValuePath(const std::string_view& switch_string) const;
-  StringType GetSwitchValueNative(const std::string_view& switch_string) const;
+  std::string GetSwitchValueASCII(std::string_view switch_string) const;
+  FilePath GetSwitchValuePath(std::string_view switch_string) const;
+  StringType GetSwitchValueNative(std::string_view switch_string) const;
 
   // Get a copy of all switches, along with their values.
   const SwitchMap& GetSwitches() const { return switches_; }
diff --git a/src/base/containers/span.h b/src/base/containers/span.h
index 29c9a97..4af83b4 100644
--- a/src/base/containers/span.h
+++ b/src/base/containers/span.h
@@ -10,6 +10,7 @@
 #include <algorithm>
 #include <array>
 #include <iterator>
+#include <string_view>
 #include <type_traits>
 #include <utility>
 
diff --git a/src/base/md5.cc b/src/base/md5.cc
index 4fcab55..54684e9 100644
--- a/src/base/md5.cc
+++ b/src/base/md5.cc
@@ -169,7 +169,7 @@
  * Update context to reflect the concatenation of another buffer full
  * of bytes.
  */
-void MD5Update(MD5Context* context, const std::string_view& data) {
+void MD5Update(MD5Context* context, std::string_view data) {
   struct Context* ctx = reinterpret_cast<struct Context*>(context);
   const uint8_t* buf = reinterpret_cast<const uint8_t*>(data.data());
   size_t len = data.size();
@@ -292,7 +292,7 @@
   MD5Final(digest, &ctx);
 }
 
-std::string MD5String(const std::string_view& str) {
+std::string MD5String(std::string_view str) {
   MD5Digest digest;
   MD5Sum(str.data(), str.length(), &digest);
   return MD5DigestToBase16(digest);
diff --git a/src/base/md5.h b/src/base/md5.h
index d25b2fc..b00165c 100644
--- a/src/base/md5.h
+++ b/src/base/md5.h
@@ -52,7 +52,7 @@
 // For the given buffer of |data| as a std::string_view, updates the given MD5
 // context with the sum of the data. You can call this any number of times
 // during the computation, except that MD5Init() must have been called first.
-void MD5Update(MD5Context* context, const std::string_view& data);
+void MD5Update(MD5Context* context, std::string_view data);
 
 // Finalizes the MD5 operation and fills the buffer with the digest.
 void MD5Final(MD5Digest* digest, MD5Context* context);
@@ -70,7 +70,7 @@
 void MD5Sum(const void* data, size_t length, MD5Digest* digest);
 
 // Returns the MD5 (in hexadecimal) of a string.
-std::string MD5String(const std::string_view& str);
+std::string MD5String(std::string_view str);
 
 }  // namespace base
 
diff --git a/src/base/strings/utf_offset_string_conversions.cc b/src/base/strings/utf_offset_string_conversions.cc
index ee55a24..6f2aaf4 100644
--- a/src/base/strings/utf_offset_string_conversions.cc
+++ b/src/base/strings/utf_offset_string_conversions.cc
@@ -228,7 +228,7 @@
 }
 
 std::u16string UTF8ToUTF16WithAdjustments(
-    const std::string_view& utf8,
+    std::string_view utf8,
     base::OffsetAdjuster::Adjustments* adjustments) {
   std::u16string result;
   UTF8ToUTF16WithAdjustments(utf8.data(), utf8.length(), &result, adjustments);
@@ -236,7 +236,7 @@
 }
 
 std::u16string UTF8ToUTF16AndAdjustOffsets(
-    const std::string_view& utf8,
+    std::string_view utf8,
     std::vector<size_t>* offsets_for_adjustment) {
   for (size_t& offset : *offsets_for_adjustment) {
     if (offset > utf8.length())
@@ -249,7 +249,7 @@
 }
 
 std::string UTF16ToUTF8AndAdjustOffsets(
-    const std::u16string_view& utf16,
+    std::u16string_view utf16,
     std::vector<size_t>* offsets_for_adjustment) {
   for (size_t& offset : *offsets_for_adjustment) {
     if (offset > utf16.length())
diff --git a/src/base/strings/utf_offset_string_conversions.h b/src/base/strings/utf_offset_string_conversions.h
index 8d6c5e8..0562e01 100644
--- a/src/base/strings/utf_offset_string_conversions.h
+++ b/src/base/strings/utf_offset_string_conversions.h
@@ -93,17 +93,17 @@
                                 std::u16string* output,
                                 base::OffsetAdjuster::Adjustments* adjustments);
 std::u16string UTF8ToUTF16WithAdjustments(
-    const std::string_view& utf8,
+    std::string_view utf8,
     base::OffsetAdjuster::Adjustments* adjustments);
 // As above, but instead internally examines the adjustments and applies them
 // to |offsets_for_adjustment|.  Input offsets greater than the length of the
 // input string will be set to std::u16string::npos.  See comments by
 // AdjustOffsets().
 std::u16string UTF8ToUTF16AndAdjustOffsets(
-    const std::string_view& utf8,
+    std::string_view utf8,
     std::vector<size_t>* offsets_for_adjustment);
 std::string UTF16ToUTF8AndAdjustOffsets(
-    const std::u16string_view& utf16,
+    std::u16string_view utf16,
     std::vector<size_t>* offsets_for_adjustment);
 
 }  // namespace base
diff --git a/src/gn/args.h b/src/gn/args.h
index 992d48f..24e8308 100644
--- a/src/gn/args.h
+++ b/src/gn/args.h
@@ -8,6 +8,7 @@
 #include <map>
 #include <mutex>
 #include <set>
+#include <string_view>
 #include <unordered_map>
 
 #include "base/macros.h"
diff --git a/src/gn/c_include_iterator.cc b/src/gn/c_include_iterator.cc
index f8626e1..9fcc6be 100644
--- a/src/gn/c_include_iterator.cc
+++ b/src/gn/c_include_iterator.cc
@@ -23,7 +23,7 @@
 // Returns a new string piece referencing the same buffer as the argument, but
 // with leading space trimmed. This only checks for space and tab characters
 // since we're dealing with lines in C source files.
-std::string_view TrimLeadingWhitespace(const std::string_view& str) {
+std::string_view TrimLeadingWhitespace(std::string_view str) {
   size_t new_begin = 0;
   while (new_begin < str.size() &&
          (str[new_begin] == ' ' || str[new_begin] == '\t'))
@@ -42,7 +42,7 @@
 //
 // We assume the line has leading whitespace trimmed. We also assume that empty
 // lines have already been filtered out.
-bool ShouldCountTowardNonIncludeLines(const std::string_view& line) {
+bool ShouldCountTowardNonIncludeLines(std::string_view line) {
   if (base::StartsWith(line, "//", base::CompareCase::SENSITIVE))
     return false;  // Don't count comments.
   if (base::StartsWith(line, "/*", base::CompareCase::SENSITIVE) ||
@@ -61,7 +61,7 @@
 //
 // The 1-based character number on the line that the include was found at
 // will be filled into *begin_char.
-IncludeType ExtractInclude(const std::string_view& line,
+IncludeType ExtractInclude(std::string_view line,
                            std::string_view* path,
                            int* begin_char) {
   static const char kInclude[] = "include";
@@ -113,7 +113,7 @@
 }
 
 // Returns true if this line has a "nogncheck" comment associated with it.
-bool HasNoCheckAnnotation(const std::string_view& line) {
+bool HasNoCheckAnnotation(std::string_view line) {
   return line.find("nogncheck") != std::string_view::npos;
 }
 
diff --git a/src/gn/command_args.cc b/src/gn/command_args.cc
index 14ca348..e74c598 100644
--- a/src/gn/command_args.cc
+++ b/src/gn/command_args.cc
@@ -40,7 +40,7 @@
 const char kSwitchOverridesOnly[] = "overrides-only";
 const char kSwitchJson[] = "json";
 
-bool DoesLineBeginWithComment(const std::string_view& line) {
+bool DoesLineBeginWithComment(std::string_view line) {
   // Skip whitespace.
   size_t i = 0;
   while (i < line.size() && base::IsAsciiWhitespace(line[i]))
@@ -67,7 +67,7 @@
 
 // Assumes DoesLineBeginWithComment(), this strips the # character from the
 // beginning and normalizes preceding whitespace.
-std::string StripHashFromLine(const std::string_view& line, bool pad) {
+std::string StripHashFromLine(std::string_view line, bool pad) {
   // Replace the # sign and everything before it with 3 spaces, so that a
   // normal comment that has a space after the # will be indented 4 spaces
   // (which makes our formatting come out nicely). If the comment is indented
@@ -137,8 +137,7 @@
 }
 
 // Override value is null if there is no override.
-void PrintArgHelp(const std::string_view& name,
-                  const Args::ValueWithOverride& val) {
+void PrintArgHelp(std::string_view name, const Args::ValueWithOverride& val) {
   OutputString(std::string(name), DECORATION_YELLOW);
   OutputString("\n");
 
@@ -163,7 +162,7 @@
 }
 
 void BuildArgJson(base::Value& dict,
-                  const std::string_view& name,
+                  std::string_view name,
                   const Args::ValueWithOverride& arg,
                   bool short_only) {
   assert(dict.is_dict());
diff --git a/src/gn/create_bundle_target_generator.cc b/src/gn/create_bundle_target_generator.cc
index b614a9c..0a3d7cf 100644
--- a/src/gn/create_bundle_target_generator.cc
+++ b/src/gn/create_bundle_target_generator.cc
@@ -76,7 +76,7 @@
 
 bool CreateBundleTargetGenerator::FillBundleDir(
     const SourceDir& bundle_root_dir,
-    const std::string_view& name,
+    std::string_view name,
     SourceDir* bundle_dir) {
   // All bundle_foo_dir properties are optional. They are only required if they
   // are used in an expansion. The check is performed there.
diff --git a/src/gn/create_bundle_target_generator.h b/src/gn/create_bundle_target_generator.h
index 6f13fb4..6a0971a 100644
--- a/src/gn/create_bundle_target_generator.h
+++ b/src/gn/create_bundle_target_generator.h
@@ -5,6 +5,8 @@
 #ifndef TOOLS_GN_CREATE_BUNDLE_TARGET_GENERATOR_H_
 #define TOOLS_GN_CREATE_BUNDLE_TARGET_GENERATOR_H_
 
+#include <string_view>
+
 #include "base/macros.h"
 #include "gn/target_generator.h"
 
@@ -24,7 +26,7 @@
 
  private:
   bool FillBundleDir(const SourceDir& bundle_root_dir,
-                     const std::string_view& name,
+                     std::string_view name,
                      SourceDir* bundle_dir);
 
   bool FillXcodeExtraAttributes();
diff --git a/src/gn/err.cc b/src/gn/err.cc
index 301ee8d..68cb046 100644
--- a/src/gn/err.cc
+++ b/src/gn/err.cc
@@ -17,7 +17,7 @@
 
 namespace {
 
-std::string GetNthLine(const std::string_view& data, int n) {
+std::string GetNthLine(std::string_view data, int n) {
   size_t line_off = Tokenizer::ByteOffsetOfNthLine(data, n);
   size_t end = line_off + 1;
   while (end < data.size() && !Tokenizer::IsNewline(data, end))
diff --git a/src/gn/escape.cc b/src/gn/escape.cc
index 3c8dc3f..687c92a 100644
--- a/src/gn/escape.cc
+++ b/src/gn/escape.cc
@@ -42,7 +42,7 @@
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0};
 // clang-format on
 
-size_t EscapeStringToString_Space(const std::string_view& str,
+size_t EscapeStringToString_Space(std::string_view str,
                                   const EscapeOptions& options,
                                   char* dest,
                                   bool* needed_quoting) {
@@ -76,7 +76,7 @@
   return ch == '$' || ch == ' ' || ch == ':';
 }
 
-size_t EscapeStringToString_Ninja(const std::string_view& str,
+size_t EscapeStringToString_Ninja(std::string_view str,
                                   const EscapeOptions& options,
                                   char* dest,
                                   bool* needed_quoting) {
@@ -93,7 +93,7 @@
   return ch == '\\' || ch == '"';
 }
 
-size_t EscapeStringToString_CompilationDatabase(const std::string_view& str,
+size_t EscapeStringToString_CompilationDatabase(std::string_view str,
                                                 const EscapeOptions& options,
                                                 char* dest,
                                                 bool* needed_quoting) {
@@ -119,7 +119,7 @@
   return i;
 }
 
-size_t EscapeStringToString_Depfile(const std::string_view& str,
+size_t EscapeStringToString_Depfile(std::string_view str,
                                     const EscapeOptions& options,
                                     char* dest,
                                     bool* needed_quoting) {
@@ -137,7 +137,7 @@
   return i;
 }
 
-size_t EscapeStringToString_NinjaPreformatted(const std::string_view& str,
+size_t EscapeStringToString_NinjaPreformatted(std::string_view str,
                                               char* dest) {
   // Only Ninja-escape $.
   size_t i = 0;
@@ -157,7 +157,7 @@
 // See:
 //   http://blogs.msdn.com/b/twistylittlepassagesallalike/archive/2011/04/23/everyone-quotes-arguments-the-wrong-way.aspx
 //   http://blogs.msdn.com/b/oldnewthing/archive/2010/09/17/10063629.aspx
-size_t EscapeStringToString_WindowsNinjaFork(const std::string_view& str,
+size_t EscapeStringToString_WindowsNinjaFork(std::string_view str,
                                              const EscapeOptions& options,
                                              char* dest,
                                              bool* needed_quoting) {
@@ -209,7 +209,7 @@
   return i;
 }
 
-size_t EscapeStringToString_PosixNinjaFork(const std::string_view& str,
+size_t EscapeStringToString_PosixNinjaFork(std::string_view str,
                                            const EscapeOptions& options,
                                            char* dest,
                                            bool* needed_quoting) {
@@ -240,7 +240,7 @@
 }
 
 // Escapes |str| into |dest| and returns the number of characters written.
-size_t EscapeStringToString(const std::string_view& str,
+size_t EscapeStringToString(std::string_view str,
                             const EscapeOptions& options,
                             char* dest,
                             bool* needed_quoting) {
@@ -286,7 +286,7 @@
 
 }  // namespace
 
-std::string EscapeString(const std::string_view& str,
+std::string EscapeString(std::string_view str,
                          const EscapeOptions& options,
                          bool* needed_quoting) {
   StackOrHeapBuffer dest(str.size() * kMaxEscapedCharsPerChar);
@@ -295,14 +295,14 @@
 }
 
 void EscapeStringToStream(std::ostream& out,
-                          const std::string_view& str,
+                          std::string_view str,
                           const EscapeOptions& options) {
   StackOrHeapBuffer dest(str.size() * kMaxEscapedCharsPerChar);
   out.write(dest, EscapeStringToString(str, options, dest, nullptr));
 }
 
 void EscapeJSONStringToStream(std::ostream& out,
-                              const std::string_view& str,
+                              std::string_view str,
                               const EscapeOptions& options) {
   std::string dest;
   bool needed_quoting = !options.inhibit_quoting;
diff --git a/src/gn/escape.h b/src/gn/escape.h
index 31f972e..57a723f 100644
--- a/src/gn/escape.h
+++ b/src/gn/escape.h
@@ -71,20 +71,20 @@
 // (if inhibit_quoting was set) quoted will be written to it. This value should
 // be initialized to false by the caller and will be written to only if it's
 // true (the common use-case is for chaining calls).
-std::string EscapeString(const std::string_view& str,
+std::string EscapeString(std::string_view str,
                          const EscapeOptions& options,
                          bool* needed_quoting);
 
 // Same as EscapeString but writes the results to the given stream, saving a
 // copy.
 void EscapeStringToStream(std::ostream& out,
-                          const std::string_view& str,
+                          std::string_view str,
                           const EscapeOptions& options);
 
 // Same as EscapeString but escape JSON string and writes the results to the
 // given stream, saving a copy.
 void EscapeJSONStringToStream(std::ostream& out,
-                              const std::string_view& str,
+                              std::string_view str,
                               const EscapeOptions& options);
 
 #endif  // TOOLS_GN_ESCAPE_H_
diff --git a/src/gn/file_writer.h b/src/gn/file_writer.h
index 0ae5061..9b7a01f 100644
--- a/src/gn/file_writer.h
+++ b/src/gn/file_writer.h
@@ -5,6 +5,8 @@
 #ifndef TOOLS_GN_FILE_WRITER_H_
 #define TOOLS_GN_FILE_WRITER_H_
 
+#include <string_view>
+
 #include "util/build_config.h"
 
 #if defined(OS_WIN)
diff --git a/src/gn/filesystem_utils.cc b/src/gn/filesystem_utils.cc
index 9eb713b..4906d56 100644
--- a/src/gn/filesystem_utils.cc
+++ b/src/gn/filesystem_utils.cc
@@ -81,8 +81,7 @@
 
 // Attempts to do a case and slash-insensitive comparison of two 8-bit Windows
 // paths.
-bool AreAbsoluteWindowsPathsEqual(const std::string_view& a,
-                                  const std::string_view& b) {
+bool AreAbsoluteWindowsPathsEqual(std::string_view a, std::string_view b) {
   if (a.size() != b.size())
     return false;
 
@@ -95,7 +94,7 @@
   return true;
 }
 
-bool DoesBeginWindowsDriveLetter(const std::string_view& path) {
+bool DoesBeginWindowsDriveLetter(std::string_view path) {
   if (path.size() < 3)
     return false;
 
@@ -200,7 +199,7 @@
   }
 }
 
-size_t AbsPathLenWithNoTrailingSlash(const std::string_view& path) {
+size_t AbsPathLenWithNoTrailingSlash(std::string_view path) {
   size_t len = path.size();
 #if defined(OS_WIN)
   size_t min_len = 3;
@@ -222,7 +221,7 @@
 #endif
 }
 
-base::FilePath UTF8ToFilePath(const std::string_view& sp) {
+base::FilePath UTF8ToFilePath(std::string_view sp) {
 #if defined(OS_WIN)
   return base::FilePath(base::UTF8ToUTF16(sp));
 #else
@@ -283,7 +282,7 @@
   path->resize(FindFilenameOffset(*path));
 }
 
-bool EndsWithSlash(const std::string_view s) {
+bool EndsWithSlash(std::string_view s) {
   return !s.empty() && IsSlash(s[s.size() - 1]);
 }
 
@@ -334,7 +333,7 @@
   return false;
 }
 
-bool IsPathAbsolute(const std::string_view& path) {
+bool IsPathAbsolute(std::string_view path) {
   if (path.empty())
     return false;
 
@@ -355,12 +354,12 @@
   return true;
 }
 
-bool IsPathSourceAbsolute(const std::string_view& path) {
+bool IsPathSourceAbsolute(std::string_view path) {
   return (path.size() >= 2 && path[0] == '/' && path[1] == '/');
 }
 
-bool MakeAbsolutePathRelativeIfPossible(const std::string_view& source_root,
-                                        const std::string_view& path,
+bool MakeAbsolutePathRelativeIfPossible(std::string_view source_root,
+                                        std::string_view path,
                                         std::string* dest) {
   DCHECK(IsPathAbsolute(source_root));
   DCHECK(IsPathAbsolute(path));
@@ -504,7 +503,7 @@
   return base::FilePath(base::JoinString(relative_components, separator));
 }
 
-void NormalizePath(std::string* path, const std::string_view& source_root) {
+void NormalizePath(std::string* path, std::string_view source_root) {
   char* pathbuf = path->empty() ? nullptr : &(*path)[0];
 
   // top_index is the first character we can modify in the path. Anything
@@ -707,7 +706,7 @@
 
 std::string RebasePath(const std::string& input,
                        const SourceDir& dest_dir,
-                       const std::string_view& source_root) {
+                       std::string_view source_root) {
   std::string ret;
   DCHECK(source_root.empty() ||
          !base::EndsWith(source_root, "/", base::CompareCase::SENSITIVE));
@@ -785,11 +784,10 @@
       .NormalizePathSeparatorsTo('/');
 }
 
-template <typename StringType>
-std::string ResolveRelative(const StringType& input,
+std::string ResolveRelative(std::string_view input,
                             const std::string& value,
                             bool as_file,
-                            const std::string_view& source_root) {
+                            std::string_view source_root) {
   std::string result;
 
   if (input.size() >= 2 && input[0] == '/' && input[1] == '/') {
@@ -850,17 +848,6 @@
   return result;
 }
 
-// Explicit template instantiation
-template std::string ResolveRelative(const std::string_view& input,
-                                     const std::string& value,
-                                     bool as_file,
-                                     const std::string_view& source_root);
-
-template std::string ResolveRelative(const std::string& input,
-                                     const std::string& value,
-                                     bool as_file,
-                                     const std::string_view& source_root);
-
 std::string DirectoryWithNoLastSlash(const SourceDir& dir) {
   std::string ret;
 
diff --git a/src/gn/filesystem_utils.h b/src/gn/filesystem_utils.h
index 830478a..9f21cff 100644
--- a/src/gn/filesystem_utils.h
+++ b/src/gn/filesystem_utils.h
@@ -20,7 +20,7 @@
 inline std::string FilePathToUTF8(const base::FilePath& path) {
   return FilePathToUTF8(path.value());
 }
-base::FilePath UTF8ToFilePath(const std::string_view& sp);
+base::FilePath UTF8ToFilePath(std::string_view sp);
 
 // Extensions -----------------------------------------------------------------
 
@@ -60,7 +60,7 @@
 }
 
 // Returns true if the given path ends with a slash.
-bool EndsWithSlash(const std::string_view s);
+bool EndsWithSlash(std::string_view s);
 
 // Path parts -----------------------------------------------------------------
 
@@ -96,12 +96,12 @@
 // Returns true if the input string is absolute. Double-slashes at the
 // beginning are treated as source-relative paths. On Windows, this handles
 // paths of both the native format: "C:/foo" and ours "/C:/foo"
-bool IsPathAbsolute(const std::string_view& path);
+bool IsPathAbsolute(std::string_view path);
 
 // Returns true if the input string is source-absolute. Source-absolute
 // paths begin with two forward slashes and resolve as if they are
 // relative to the source root.
-bool IsPathSourceAbsolute(const std::string_view& path);
+bool IsPathSourceAbsolute(std::string_view path);
 
 // Given an absolute path, checks to see if is it is inside the source root.
 // If it is, fills a source-absolute path into the given output and returns
@@ -112,8 +112,8 @@
 // ("/C:/"). The source root can end with a slash or not.
 //
 // Note that this does not attempt to normalize slashes in the output.
-bool MakeAbsolutePathRelativeIfPossible(const std::string_view& source_root,
-                                        const std::string_view& path,
+bool MakeAbsolutePathRelativeIfPossible(std::string_view source_root,
+                                        std::string_view path,
                                         std::string* dest);
 
 // Given two absolute paths |base| and |target|, returns a relative path to
@@ -134,7 +134,7 @@
 // a leading slash. Otherwise, |path| will retain its relativity. |source_root|
 // must not end with a slash.
 void NormalizePath(std::string* path,
-                   const std::string_view& source_root = std::string_view());
+                   std::string_view source_root = std::string_view());
 
 // Converts slashes to backslashes for Windows. Keeps the string unchanged
 // for other systems.
@@ -147,10 +147,9 @@
 // If supplied, the |source_root| parameter is the absolute path to
 // the source root and not end in a slash. Unless you know that the
 // inputs are always source relative, this should be supplied.
-std::string RebasePath(
-    const std::string& input,
-    const SourceDir& dest_dir,
-    const std::string_view& source_root = std::string_view());
+std::string RebasePath(const std::string& input,
+                       const SourceDir& dest_dir,
+                       std::string_view source_root = std::string_view());
 
 // Resolves a file or dir name (parameter input) relative to
 // value directory. Will return an empty SourceDir/File on error
@@ -165,11 +164,10 @@
 // If source_root is supplied, these functions will additionally handle the
 // case where the input is a system-absolute but still inside the source
 // tree. This is the case for some external tools.
-template <typename StringType>
-std::string ResolveRelative(const StringType& input,
+std::string ResolveRelative(std::string_view input,
                             const std::string& value,
                             bool as_file,
-                            const std::string_view& source_root);
+                            std::string_view source_root);
 
 // Resolves source file or directory relative to some given source root. Returns
 // an empty file path on error.
diff --git a/src/gn/generated_file_target_generator.cc b/src/gn/generated_file_target_generator.cc
index 2506f19..0a92122 100644
--- a/src/gn/generated_file_target_generator.cc
+++ b/src/gn/generated_file_target_generator.cc
@@ -68,7 +68,7 @@
 }
 
 bool GeneratedFileTargetGenerator::IsMetadataCollectionTarget(
-    const std::string_view& variable,
+    std::string_view variable,
     const ParseNode* origin) {
   if (contents_defined_) {
     *err_ =
diff --git a/src/gn/generated_file_target_generator.h b/src/gn/generated_file_target_generator.h
index dcc4814..c10c600 100644
--- a/src/gn/generated_file_target_generator.h
+++ b/src/gn/generated_file_target_generator.h
@@ -5,6 +5,8 @@
 #ifndef TOOLS_GN_GENERATED_FILE_TARGET_GENERATOR_H_
 #define TOOLS_GN_GENERATED_FILE_TARGET_GENERATOR_H_
 
+#include <string_view>
+
 #include "base/macros.h"
 #include "gn/target.h"
 #include "gn/target_generator.h"
@@ -35,7 +37,7 @@
   // it is okay to set metadata collection variables on this target.
   //
   // Should be called before FillContents().
-  bool IsMetadataCollectionTarget(const std::string_view& variable,
+  bool IsMetadataCollectionTarget(std::string_view variable,
                                   const ParseNode* origin);
 
   bool contents_defined_ = false;
diff --git a/src/gn/input_conversion.cc b/src/gn/input_conversion.cc
index e82a939..73e8dcc 100644
--- a/src/gn/input_conversion.cc
+++ b/src/gn/input_conversion.cc
@@ -108,7 +108,7 @@
   return ret;
 }
 
-bool IsIdentifier(const std::string_view& buffer) {
+bool IsIdentifier(std::string_view buffer) {
   DCHECK(buffer.size() > 0);
   if (!Tokenizer::IsIdentifierFirstChar(buffer[0]))
     return false;
diff --git a/src/gn/label.cc b/src/gn/label.cc
index 173c3d5..c78b00e 100644
--- a/src/gn/label.cc
+++ b/src/gn/label.cc
@@ -29,8 +29,8 @@
 // used. The value is used only for generating error messages.
 bool ComputeBuildLocationFromDep(const Value& input_value,
                                  const SourceDir& current_dir,
-                                 const std::string_view& source_root,
-                                 const std::string_view& input,
+                                 std::string_view source_root,
+                                 std::string_view input,
                                  SourceDir* result,
                                  Err* err) {
   // No rule, use the current location.
@@ -50,7 +50,7 @@
 // error messages.
 bool ComputeTargetNameFromDep(const Value& input_value,
                               const SourceDir& computed_location,
-                              const std::string_view& input,
+                              std::string_view input,
                               StringAtom* result,
                               Err* err) {
   if (!input.empty()) {
@@ -88,10 +88,10 @@
 // Returns true on success. On failure, the out* variables might be written to
 // but shouldn't be used.
 bool Resolve(const SourceDir& current_dir,
-             const std::string_view& source_root,
+             std::string_view source_root,
              const Label& current_toolchain,
              const Value& original_value,
-             const std::string_view& input,
+             std::string_view input,
              SourceDir* out_dir,
              StringAtom* out_name,
              SourceDir* out_toolchain_dir,
@@ -256,22 +256,21 @@
 Label::Label() : hash_(ComputeHash()) {}
 
 Label::Label(const SourceDir& dir,
-             const std::string_view& name,
+             std::string_view name,
              const SourceDir& toolchain_dir,
-             const std::string_view& toolchain_name)
+             std::string_view toolchain_name)
     : dir_(dir),
       name_(StringAtom(name)),
       toolchain_dir_(toolchain_dir),
       toolchain_name_(StringAtom(toolchain_name)),
       hash_(ComputeHash()) {}
 
-Label::Label(const SourceDir& dir, const std::string_view& name)
-    : dir_(dir), name_(StringAtom(name)),
-      hash_(ComputeHash()) {}
+Label::Label(const SourceDir& dir, std::string_view name)
+    : dir_(dir), name_(StringAtom(name)), hash_(ComputeHash()) {}
 
 // static
 Label Label::Resolve(const SourceDir& current_dir,
-                     const std::string_view& source_root,
+                     std::string_view source_root,
                      const Label& current_toolchain,
                      const Value& input,
                      Err* err) {
diff --git a/src/gn/label.h b/src/gn/label.h
index dc9813b..1458fcc 100644
--- a/src/gn/label.h
+++ b/src/gn/label.h
@@ -5,6 +5,7 @@
 #ifndef TOOLS_GN_LABEL_H_
 #define TOOLS_GN_LABEL_H_
 
+#include <string_view>
 #include <tuple>
 
 #include <stddef.h>
@@ -25,18 +26,18 @@
   // Makes a label given an already-separated out path and name.
   // See also Resolve().
   Label(const SourceDir& dir,
-        const std::string_view& name,
+        std::string_view name,
         const SourceDir& toolchain_dir,
-        const std::string_view& toolchain_name);
+        std::string_view toolchain_name);
 
   // Makes a label with an empty toolchain.
-  Label(const SourceDir& dir, const std::string_view& name);
+  Label(const SourceDir& dir, std::string_view name);
 
   // Resolves a string from a build file that may be relative to the
   // current directory into a fully qualified label. On failure returns an
   // is_null() label and sets the error.
   static Label Resolve(const SourceDir& current_dir,
-                       const std::string_view& source_root,
+                       std::string_view source_root,
                        const Label& current_toolchain,
                        const Value& input,
                        Err* err);
diff --git a/src/gn/label_pattern.cc b/src/gn/label_pattern.cc
index 35235e5..9a21829 100644
--- a/src/gn/label_pattern.cc
+++ b/src/gn/label_pattern.cc
@@ -53,7 +53,7 @@
 
 LabelPattern::LabelPattern(Type type,
                            const SourceDir& dir,
-                           const std::string_view& name,
+                           std::string_view name,
                            const Label& toolchain_label)
     : toolchain_(toolchain_label), type_(type), dir_(dir), name_(name) {}
 
@@ -63,7 +63,7 @@
 
 // static
 LabelPattern LabelPattern::GetPattern(const SourceDir& current_dir,
-                                      const std::string_view& source_root,
+                                      std::string_view source_root,
                                       const Value& value,
                                       Err* err) {
   if (!value.VerifyTypeIs(Value::STRING, err))
diff --git a/src/gn/label_pattern.h b/src/gn/label_pattern.h
index f40750e..fbb11fa 100644
--- a/src/gn/label_pattern.h
+++ b/src/gn/label_pattern.h
@@ -30,7 +30,7 @@
   LabelPattern();
   LabelPattern(Type type,
                const SourceDir& dir,
-               const std::string_view& name,
+               std::string_view name,
                const Label& toolchain_label);
   LabelPattern(const LabelPattern& other);
   ~LabelPattern();
@@ -38,7 +38,7 @@
   // Converts the given input string to a pattern. This does special stuff
   // to treat the pattern as a label. Sets the error on failure.
   static LabelPattern GetPattern(const SourceDir& current_dir,
-                                 const std::string_view& source_root,
+                                 std::string_view source_root,
                                  const Value& value,
                                  Err* err);
 
diff --git a/src/gn/lib_file.cc b/src/gn/lib_file.cc
index cbb67f1..6723a18 100644
--- a/src/gn/lib_file.cc
+++ b/src/gn/lib_file.cc
@@ -8,7 +8,7 @@
 
 LibFile::LibFile(const SourceFile& source_file) : source_file_(source_file) {}
 
-LibFile::LibFile(const std::string_view& lib_name)
+LibFile::LibFile(std::string_view lib_name)
     : name_(lib_name.data(), lib_name.size()) {
   DCHECK(!lib_name.empty());
 }
diff --git a/src/gn/lib_file.h b/src/gn/lib_file.h
index 47952f8..575a9e9 100644
--- a/src/gn/lib_file.h
+++ b/src/gn/lib_file.h
@@ -19,7 +19,7 @@
  public:
   LibFile() = default;
 
-  explicit LibFile(const std::string_view& lib_name);
+  explicit LibFile(std::string_view lib_name);
   explicit LibFile(const SourceFile& source_file);
 
   bool is_source_file() const { return name_.empty(); }
diff --git a/src/gn/ninja_build_writer.cc b/src/gn/ninja_build_writer.cc
index e7852aa..28e2fa6 100644
--- a/src/gn/ninja_build_writer.cc
+++ b/src/gn/ninja_build_writer.cc
@@ -629,7 +629,7 @@
 }
 
 void NinjaBuildWriter::WritePhonyRule(const Target* target,
-                                      const std::string& phony_name) {
+                                      std::string_view phony_name) {
   EscapeOptions ninja_escape;
   ninja_escape.mode = ESCAPE_NINJA;
 
diff --git a/src/gn/ninja_build_writer.h b/src/gn/ninja_build_writer.h
index 9f41a38..b5e9e6a 100644
--- a/src/gn/ninja_build_writer.h
+++ b/src/gn/ninja_build_writer.h
@@ -7,6 +7,7 @@
 
 #include <iosfwd>
 #include <map>
+#include <string_view>
 #include <unordered_map>
 #include <vector>
 
@@ -56,7 +57,7 @@
   bool WriteSubninjas(Err* err);
   bool WritePhonyAndAllRules(Err* err);
 
-  void WritePhonyRule(const Target* target, const std::string& phony_name);
+  void WritePhonyRule(const Target* target, std::string_view phony_name);
 
   const BuildSettings* build_settings_;
 
diff --git a/src/gn/ninja_target_command_util.h b/src/gn/ninja_target_command_util.h
index d9d30bc..00f9a77 100644
--- a/src/gn/ninja_target_command_util.h
+++ b/src/gn/ninja_target_command_util.h
@@ -5,6 +5,8 @@
 #ifndef TOOLS_GN_NINJA_TARGET_COMMAND_WRITER_H_
 #define TOOLS_GN_NINJA_TARGET_COMMAND_WRITER_H_
 
+#include <string_view>
+
 #include "base/json/string_escape.h"
 #include "gn/config_values_extractors.h"
 #include "gn/escape.h"
diff --git a/src/gn/parse_tree.cc b/src/gn/parse_tree.cc
index 9ab28b5..83452d0 100644
--- a/src/gn/parse_tree.cc
+++ b/src/gn/parse_tree.cc
@@ -221,7 +221,7 @@
 }
 
 base::Value ParseNode::CreateJSONNode(const char* type,
-                                      const std::string_view& value,
+                                      std::string_view value,
                                       LocationRange location) const {
   base::Value dict(base::Value::Type::DICTIONARY);
   dict.SetKey(kJsonNodeType, base::Value(type));
diff --git a/src/gn/parse_tree.h b/src/gn/parse_tree.h
index 9ffacc2..57d82e3 100644
--- a/src/gn/parse_tree.h
+++ b/src/gn/parse_tree.h
@@ -8,6 +8,7 @@
 #include <stddef.h>
 
 #include <memory>
+#include <string_view>
 #include <utility>
 #include <vector>
 
@@ -115,7 +116,7 @@
   // given type (and value).
   base::Value CreateJSONNode(const char* type, LocationRange location) const;
   base::Value CreateJSONNode(const char* type,
-                             const std::string_view& value,
+                             std::string_view value,
                              LocationRange location) const;
 
  private:
diff --git a/src/gn/path_output.cc b/src/gn/path_output.cc
index c89e061..d2886d7 100644
--- a/src/gn/path_output.cc
+++ b/src/gn/path_output.cc
@@ -11,7 +11,7 @@
 #include "util/build_config.h"
 
 PathOutput::PathOutput(const SourceDir& current_dir,
-                       const std::string_view& source_root,
+                       std::string_view source_root,
                        EscapingMode escaping)
     : current_dir_(current_dir) {
   inverse_current_dir_ = RebasePath("//", current_dir, source_root);
@@ -129,7 +129,7 @@
 }
 
 void PathOutput::WriteSourceRelativeString(std::ostream& out,
-                                           const std::string_view& str) const {
+                                           std::string_view str) const {
   if (options_.mode == ESCAPE_NINJA_COMMAND) {
     // Shell escaping needs an intermediate string since it may end up
     // quoting the whole thing.
@@ -150,8 +150,7 @@
   }
 }
 
-void PathOutput::WritePathStr(std::ostream& out,
-                              const std::string_view& str) const {
+void PathOutput::WritePathStr(std::ostream& out, std::string_view str) const {
   DCHECK(str.size() > 0 && str[0] == '/');
 
   if (str.substr(0, current_dir_.value().size()) ==
diff --git a/src/gn/path_output.h b/src/gn/path_output.h
index 729ba98..e04d236 100644
--- a/src/gn/path_output.h
+++ b/src/gn/path_output.h
@@ -35,7 +35,7 @@
   };
 
   PathOutput(const SourceDir& current_dir,
-             const std::string_view& source_root,
+             std::string_view source_root,
              EscapingMode escaping);
   ~PathOutput();
 
@@ -72,13 +72,12 @@
 
   // Backend for WriteFile and WriteDir. This appends the given file or
   // directory string to the file.
-  void WritePathStr(std::ostream& out, const std::string_view& str) const;
+  void WritePathStr(std::ostream& out, std::string_view str) const;
 
  private:
   // Takes the given string and writes it out, appending to the inverse
   // current dir. This assumes leading slashes have been trimmed.
-  void WriteSourceRelativeString(std::ostream& out,
-                                 const std::string_view& str) const;
+  void WriteSourceRelativeString(std::ostream& out, std::string_view str) const;
 
   SourceDir current_dir_;
 
diff --git a/src/gn/rust_project_writer.cc b/src/gn/rust_project_writer.cc
index 117442f..ee62479 100644
--- a/src/gn/rust_project_writer.cc
+++ b/src/gn/rust_project_writer.cc
@@ -181,8 +181,8 @@
 
 // Add each of the crates a sysroot has, including their dependencies.
 void AddSysrootCrate(const BuildSettings* build_settings,
-                     const std::string_view crate,
-                     const std::string_view current_sysroot,
+                     std::string_view crate,
+                     std::string_view current_sysroot,
                      SysrootCrateIndexMap& sysroot_crate_lookup,
                      CrateList& crate_list) {
   if (sysroot_crate_lookup.find(crate) != sysroot_crate_lookup.end()) {
@@ -227,7 +227,7 @@
 
 // Add the given sysroot to the project, if it hasn't already been added.
 void AddSysroot(const BuildSettings* build_settings,
-                const std::string_view sysroot,
+                std::string_view sysroot,
                 SysrootIndexMap& sysroot_lookup,
                 CrateList& crate_list) {
   // If this sysroot is already in the lookup, we don't add it again.
@@ -244,7 +244,7 @@
 
 void AddSysrootDependencyToCrate(Crate* crate,
                                  const SysrootCrateIndexMap& sysroot,
-                                 const std::string_view crate_name) {
+                                 std::string_view crate_name) {
   if (const auto crate_idx = sysroot.find(crate_name);
       crate_idx != sysroot.end()) {
     crate->AddDependency(crate_idx->second, std::string(crate_name));
diff --git a/src/gn/rust_project_writer_helpers.h b/src/gn/rust_project_writer_helpers.h
index 0020e2c..a63ded1 100644
--- a/src/gn/rust_project_writer_helpers.h
+++ b/src/gn/rust_project_writer_helpers.h
@@ -9,6 +9,7 @@
 #include <optional>
 #include <sstream>
 #include <string>
+#include <string_view>
 #include <tuple>
 #include <unordered_map>
 #include <vector>
@@ -104,7 +105,7 @@
 // Add all of the crates for a sysroot (path) to the rust_project ostream.
 // Add the given sysroot to the project, if it hasn't already been added.
 void AddSysroot(const BuildSettings* build_settings,
-                const std::string_view sysroot,
+                std::string_view sysroot,
                 SysrootIndexMap& sysroot_lookup,
                 CrateList& crate_list);
 
diff --git a/src/gn/rust_tool.h b/src/gn/rust_tool.h
index 6a4fdf7..8eec377 100644
--- a/src/gn/rust_tool.h
+++ b/src/gn/rust_tool.h
@@ -6,6 +6,7 @@
 #define TOOLS_GN_RUST_TOOL_H_
 
 #include <string>
+#include <string_view>
 
 #include "base/logging.h"
 #include "base/macros.h"
diff --git a/src/gn/scope.cc b/src/gn/scope.cc
index 7e92766..05b0995 100644
--- a/src/gn/scope.cc
+++ b/src/gn/scope.cc
@@ -21,7 +21,7 @@
 // Returns true if this variable name should be considered private. Private
 // values start with an underscore, and are not imported from "gni" files
 // when processing an import.
-bool IsPrivateVar(const std::string_view& name) {
+bool IsPrivateVar(std::string_view name) {
   return name.empty() || name[0] == '_';
 }
 
@@ -74,13 +74,12 @@
   return !values_.empty();
 }
 
-const Value* Scope::GetValue(const std::string_view& ident,
-                             bool counts_as_used) {
+const Value* Scope::GetValue(std::string_view ident, bool counts_as_used) {
   const Scope* found_in_scope = nullptr;
   return GetValueWithScope(ident, counts_as_used, &found_in_scope);
 }
 
-const Value* Scope::GetValueWithScope(const std::string_view& ident,
+const Value* Scope::GetValueWithScope(std::string_view ident,
                                       bool counts_as_used,
                                       const Scope** found_in_scope) {
   // First check for programmatically-provided values.
@@ -110,7 +109,7 @@
   return nullptr;
 }
 
-Value* Scope::GetMutableValue(const std::string_view& ident,
+Value* Scope::GetMutableValue(std::string_view ident,
                               SearchNested search_mode,
                               bool counts_as_used) {
   // Don't do programmatic values, which are not mutable.
@@ -129,7 +128,7 @@
   return nullptr;
 }
 
-std::string_view Scope::GetStorageKey(const std::string_view& ident) const {
+std::string_view Scope::GetStorageKey(std::string_view ident) const {
   RecordMap::const_iterator found = values_.find(ident);
   if (found != values_.end())
     return found->first;
@@ -140,12 +139,12 @@
   return std::string_view();
 }
 
-const Value* Scope::GetValue(const std::string_view& ident) const {
+const Value* Scope::GetValue(std::string_view ident) const {
   const Scope* found_in_scope = nullptr;
   return GetValueWithScope(ident, &found_in_scope);
 }
 
-const Value* Scope::GetValueWithScope(const std::string_view& ident,
+const Value* Scope::GetValueWithScope(std::string_view ident,
                                       const Scope** found_in_scope) const {
   RecordMap::const_iterator found = values_.find(ident);
   if (found != values_.end()) {
@@ -157,7 +156,7 @@
   return nullptr;
 }
 
-Value* Scope::SetValue(const std::string_view& ident,
+Value* Scope::SetValue(std::string_view ident,
                        Value v,
                        const ParseNode* set_node) {
   Record& r = values_[ident];  // Clears any existing value.
@@ -166,7 +165,7 @@
   return &r.value;
 }
 
-void Scope::RemoveIdentifier(const std::string_view& ident) {
+void Scope::RemoveIdentifier(std::string_view ident) {
   RecordMap::iterator found = values_.find(ident);
   if (found != values_.end())
     values_.erase(found);
@@ -203,7 +202,7 @@
   return nullptr;
 }
 
-void Scope::MarkUsed(const std::string_view& ident) {
+void Scope::MarkUsed(std::string_view ident) {
   RecordMap::iterator found = values_.find(ident);
   if (found == values_.end()) {
     NOTREACHED();
@@ -227,7 +226,7 @@
   }
 }
 
-void Scope::MarkUnused(const std::string_view& ident) {
+void Scope::MarkUnused(std::string_view ident) {
   RecordMap::iterator found = values_.find(ident);
   if (found == values_.end()) {
     NOTREACHED();
@@ -236,7 +235,7 @@
   found->second.used = false;
 }
 
-bool Scope::IsSetButUnused(const std::string_view& ident) const {
+bool Scope::IsSetButUnused(std::string_view ident) const {
   RecordMap::const_iterator found = values_.find(ident);
   if (found != values_.end()) {
     if (!found->second.used) {
@@ -298,7 +297,7 @@
                                 Err* err) const {
   // Values.
   for (const auto& pair : values_) {
-    const std::string_view& current_name = pair.first;
+    const std::string_view current_name = pair.first;
     if (options.skip_private_vars && IsPrivateVar(current_name))
       continue;  // Skip this private var.
     if (!options.excluded_values.empty() &&
diff --git a/src/gn/scope.h b/src/gn/scope.h
index e6a2f5f..341cefa 100644
--- a/src/gn/scope.h
+++ b/src/gn/scope.h
@@ -8,6 +8,7 @@
 #include <map>
 #include <memory>
 #include <set>
+#include <string_view>
 #include <unordered_map>
 #include <utility>
 #include <vector>
@@ -58,8 +59,7 @@
 
     // Returns a non-null value if the given value can be programmatically
     // generated, or NULL if there is none.
-    virtual const Value* GetProgrammaticValue(
-        const std::string_view& ident) = 0;
+    virtual const Value* GetProgrammaticValue(std::string_view ident) = 0;
 
    protected:
     Scope* scope_;
@@ -135,11 +135,11 @@
   // found_in_scope is set to the scope that contains the definition of the
   // ident. If the value was provided programmatically (like host_cpu),
   // found_in_scope will be set to null.
-  const Value* GetValue(const std::string_view& ident, bool counts_as_used);
-  const Value* GetValue(const std::string_view& ident) const;
-  const Value* GetValueWithScope(const std::string_view& ident,
+  const Value* GetValue(std::string_view ident, bool counts_as_used);
+  const Value* GetValue(std::string_view ident) const;
+  const Value* GetValueWithScope(std::string_view ident,
                                  const Scope** found_in_scope) const;
-  const Value* GetValueWithScope(const std::string_view& ident,
+  const Value* GetValueWithScope(std::string_view ident,
                                  bool counts_as_used,
                                  const Scope** found_in_scope);
 
@@ -165,7 +165,7 @@
   //    }
   // The 6 should get set on the nested scope rather than modify the value
   // in the outer one.
-  Value* GetMutableValue(const std::string_view& ident,
+  Value* GetMutableValue(std::string_view ident,
                          SearchNested search_mode,
                          bool counts_as_used);
 
@@ -175,18 +175,16 @@
   // is static and won't be deleted for the life of the program, so it can be
   // used as keys in places that may outlive a temporary. It will return an
   // empty string for programmatic and nonexistent values.
-  std::string_view GetStorageKey(const std::string_view& ident) const;
+  std::string_view GetStorageKey(std::string_view ident) const;
 
   // The set_node indicates the statement that caused the set, for displaying
   // errors later. Returns a pointer to the value in the current scope (a copy
   // is made for storage).
-  Value* SetValue(const std::string_view& ident,
-                  Value v,
-                  const ParseNode* set_node);
+  Value* SetValue(std::string_view ident, Value v, const ParseNode* set_node);
 
   // Removes the value with the given identifier if it exists on the current
   // scope. This does not search recursive scopes. Does nothing if not found.
-  void RemoveIdentifier(const std::string_view& ident);
+  void RemoveIdentifier(std::string_view ident);
 
   // Removes from this scope all identifiers and templates that are considered
   // private.
@@ -200,17 +198,17 @@
   const Template* GetTemplate(const std::string& name) const;
 
   // Marks the given identifier as (un)used in the current scope.
-  void MarkUsed(const std::string_view& ident);
+  void MarkUsed(std::string_view ident);
   void MarkAllUsed();
   void MarkAllUsed(const std::set<std::string>& excluded_values);
-  void MarkUnused(const std::string_view& ident);
+  void MarkUnused(std::string_view ident);
 
   // Checks to see if the scope has a var set that hasn't been used. This is
   // called before replacing the var with a different one. It does not check
   // containing scopes.
   //
   // If the identifier is present but hasnn't been used, return true.
-  bool IsSetButUnused(const std::string_view& ident) const;
+  bool IsSetButUnused(std::string_view ident) const;
 
   // Checks the scope to see if any values were set but not used, and fills in
   // the error and returns false if they were.
diff --git a/src/gn/scope_per_file_provider.cc b/src/gn/scope_per_file_provider.cc
index 3110a8f..9332c40 100644
--- a/src/gn/scope_per_file_provider.cc
+++ b/src/gn/scope_per_file_provider.cc
@@ -20,7 +20,7 @@
 ScopePerFileProvider::~ScopePerFileProvider() = default;
 
 const Value* ScopePerFileProvider::GetProgrammaticValue(
-    const std::string_view& ident) {
+    std::string_view ident) {
   if (ident == variables::kCurrentToolchain)
     return GetCurrentToolchain();
   if (ident == variables::kDefaultToolchain)
diff --git a/src/gn/scope_per_file_provider.h b/src/gn/scope_per_file_provider.h
index 228bac3..3daa4fb 100644
--- a/src/gn/scope_per_file_provider.h
+++ b/src/gn/scope_per_file_provider.h
@@ -6,6 +6,7 @@
 #define TOOLS_GN_SCOPE_PER_FILE_PROVIDER_H_
 
 #include <memory>
+#include <string_view>
 
 #include "base/macros.h"
 #include "gn/scope.h"
@@ -21,7 +22,7 @@
   ~ScopePerFileProvider() override;
 
   // ProgrammaticProvider implementation.
-  const Value* GetProgrammaticValue(const std::string_view& ident) override;
+  const Value* GetProgrammaticValue(std::string_view ident) override;
 
  private:
   const Value* GetCurrentToolchain();
diff --git a/src/gn/source_dir.cc b/src/gn/source_dir.cc
index ce92cf2..f34a637 100644
--- a/src/gn/source_dir.cc
+++ b/src/gn/source_dir.cc
@@ -13,7 +13,7 @@
 
 namespace {
 
-void AssertValueSourceDirString(const std::string_view s) {
+void AssertValueSourceDirString(std::string_view s) {
   if (!s.empty()) {
 #if defined(OS_WIN)
     DCHECK(s[0] == '/' ||
@@ -27,10 +27,9 @@
 
 // Validates input value (input_value) and sets proper error message.
 // Note: Parameter blame_input is used only for generating error message.
-template <typename StringType>
 bool ValidateResolveInput(bool as_file,
                           const Value& blame_input_value,
-                          const StringType& input_value,
+                          std::string_view input_value,
                           Err* err) {
   if (as_file) {
     // It's an error to resolve an empty string or one that is a directory
@@ -57,7 +56,7 @@
   return true;
 }
 
-static StringAtom SourceDirStringAtom(const std::string_view s) {
+static StringAtom SourceDirStringAtom(std::string_view s) {
   if (EndsWithSlash(s)) {  // Avoid allocation when possible.
     AssertValueSourceDirString(s);
     return StringAtom(s);
@@ -73,44 +72,49 @@
 
 }  // namespace
 
-SourceDir::SourceDir(const std::string_view s)
-    : value_(SourceDirStringAtom(s)) {}
+SourceDir::SourceDir(std::string_view s) : value_(SourceDirStringAtom(s)) {}
 
-template <typename StringType>
-std::string SourceDir::ResolveRelativeAs(
-    bool as_file,
-    const Value& blame_input_value,
-    const StringType& input_value,
-    Err* err,
-    const std::string_view& source_root) const {
-  if (!ValidateResolveInput<StringType>(as_file, blame_input_value, input_value,
-                                        err)) {
+std::string SourceDir::ResolveRelativeAs(bool as_file,
+                                         const Value& blame_input_value,
+                                         std::string_view input_value,
+                                         Err* err,
+                                         std::string_view source_root) const {
+  if (!ValidateResolveInput(as_file, blame_input_value, input_value, err)) {
     return std::string();
   }
   return ResolveRelative(input_value, value_.str(), as_file, source_root);
 }
 
-SourceFile SourceDir::ResolveRelativeFile(
-    const Value& p,
-    Err* err,
-    const std::string_view& source_root) const {
+SourceFile SourceDir::ResolveRelativeFile(const Value& p,
+                                          Err* err,
+                                          std::string_view source_root) const {
   SourceFile ret;
 
   if (!p.VerifyTypeIs(Value::STRING, err))
     return ret;
 
   const std::string& input_string = p.string_value();
-  if (!ValidateResolveInput<std::string>(true, p, input_string, err))
+  if (!ValidateResolveInput(true, p, input_string, err))
     return ret;
 
   ret.SetValue(ResolveRelative(input_string, value_.str(), true, source_root));
   return ret;
 }
 
+SourceDir SourceDir::ResolveRelativeDir(const Value& blame_input_value,
+                                        std::string_view input_value,
+                                        Err* err,
+                                        std::string_view source_root) const {
+  SourceDir ret;
+  ret.value_ = StringAtom(ResolveRelativeAs(false, blame_input_value,
+                                            input_value, err, source_root));
+  return ret;
+}
+
 std::string SourceDir::ResolveRelativeAs(bool as_file,
                                          const Value& v,
                                          Err* err,
-                                         const std::string_view& source_root,
+                                         std::string_view source_root,
                                          const std::string* v_value) const {
   if (!v.VerifyTypeIs(Value::STRING, err))
     return std::string();
@@ -125,31 +129,15 @@
   return result;
 }
 
-SourceDir SourceDir::ResolveRelativeDir(
-    const Value& v,
-    Err* err,
-    const std::string_view& source_root) const {
+SourceDir SourceDir::ResolveRelativeDir(const Value& v,
+                                        Err* err,
+                                        std::string_view source_root) const {
   if (!v.VerifyTypeIs(Value::STRING, err))
     return SourceDir();
 
-  return ResolveRelativeDir<std::string>(v, v.string_value(), err, source_root);
+  return ResolveRelativeDir(v, v.string_value(), err, source_root);
 }
 
 base::FilePath SourceDir::Resolve(const base::FilePath& source_root) const {
   return ResolvePath(value_.str(), false, source_root);
 }
-
-// Explicit template instantiation
-template std::string SourceDir::ResolveRelativeAs(
-    bool as_file,
-    const Value& blame_input_value,
-    const std::string& input_value,
-    Err* err,
-    const std::string_view& source_root) const;
-
-template std::string SourceDir::ResolveRelativeAs(
-    bool as_file,
-    const Value& blame_input_value,
-    const std::string_view& input_value,
-    Err* err,
-    const std::string_view& source_root) const;
diff --git a/src/gn/source_dir.h b/src/gn/source_dir.h
index 5c436f4..d8b3c28 100644
--- a/src/gn/source_dir.h
+++ b/src/gn/source_dir.h
@@ -31,7 +31,7 @@
  public:
   SourceDir() = default;
 
-  SourceDir(const std::string_view s);
+  SourceDir(std::string_view s);
 
   // Resolves a file or dir name (based on as_file parameter) relative
   // to this source directory. Will return an empty string on error
@@ -48,44 +48,37 @@
       bool as_file,
       const Value& v,
       Err* err,
-      const std::string_view& source_root = std::string_view(),
+      std::string_view source_root = std::string_view(),
       const std::string* v_value = nullptr) const;
 
   // Like ResolveRelativeAs above, but allows one to produce result
   // without overhead for string conversion (on input value).
-  template <typename StringType>
   std::string ResolveRelativeAs(
       bool as_file,
       const Value& blame_input_value,
-      const StringType& input_value,
+      std::string_view input_value,
       Err* err,
-      const std::string_view& source_root = std::string_view()) const;
+      std::string_view source_root = std::string_view()) const;
 
   // Wrapper for ResolveRelativeAs.
   SourceFile ResolveRelativeFile(
       const Value& p,
       Err* err,
-      const std::string_view& source_root = std::string_view()) const;
+      std::string_view source_root = std::string_view()) const;
 
   // Wrapper for ResolveRelativeAs.
-  template <typename StringType>
   SourceDir ResolveRelativeDir(
       const Value& blame_input_value,
-      const StringType& input_value,
+      std::string_view input_value,
       Err* err,
-      const std::string_view& source_root = std::string_view()) const {
-    SourceDir ret;
-    ret.value_ = StringAtom(ResolveRelativeAs<StringType>(
-        false, blame_input_value, input_value, err, source_root));
-    return ret;
-  }
+      std::string_view source_root = std::string_view()) const;
 
   // Wrapper for ResolveRelativeDir where input_value equals to
   // v.string_value().
   SourceDir ResolveRelativeDir(
       const Value& v,
       Err* err,
-      const std::string_view& source_root = std::string_view()) const;
+      std::string_view source_root = std::string_view()) const;
 
   // Resolves this source file relative to some given source root. Returns
   // an empty file path on error.
diff --git a/src/gn/string_atom.cc b/src/gn/string_atom.cc
index fe1ef73..b4cd9f7 100644
--- a/src/gn/string_atom.cc
+++ b/src/gn/string_atom.cc
@@ -163,7 +163,7 @@
    public:
     // Init the n-th string in the slab with |str|.
     // Return its location as well.
-    std::string* init(size_t index, const std::string_view& str) {
+    std::string* init(size_t index, std::string_view str) {
       std::string* result = &items_[index].str;
       new (result) std::string(str);
       return result;
diff --git a/src/gn/string_atom.h b/src/gn/string_atom.h
index 29d4e41..541399e 100644
--- a/src/gn/string_atom.h
+++ b/src/gn/string_atom.h
@@ -7,6 +7,7 @@
 
 #include <functional>
 #include <string>
+#include <string_view>
 
 // A StringAtom models a pointer to a globally unique constant string.
 //
diff --git a/src/gn/string_output_buffer.h b/src/gn/string_output_buffer.h
index d2a42c9..5e89250 100644
--- a/src/gn/string_output_buffer.h
+++ b/src/gn/string_output_buffer.h
@@ -9,6 +9,7 @@
 #include <memory>
 #include <streambuf>
 #include <string>
+#include <string_view>
 #include <vector>
 
 namespace base {
diff --git a/src/gn/string_utils.cc b/src/gn/string_utils.cc
index b785e75..bff9e8f 100644
--- a/src/gn/string_utils.cc
+++ b/src/gn/string_utils.cc
@@ -287,8 +287,8 @@
   return true;
 }
 
-size_t EditDistance(const std::string_view& s1,
-                    const std::string_view& s2,
+size_t EditDistance(std::string_view s1,
+                    std::string_view s2,
                     size_t max_edit_distance) {
   // The algorithm implemented below is the "classic"
   // dynamic-programming algorithm for computing the Levenshtein
@@ -329,7 +329,7 @@
   return row[n];
 }
 
-std::string_view SpellcheckString(const std::string_view& text,
+std::string_view SpellcheckString(std::string_view text,
                                   const std::vector<std::string_view>& words) {
   const size_t kMaxValidEditDistance = 3u;
 
diff --git a/src/gn/string_utils.h b/src/gn/string_utils.h
index a98a485..4b3a69c 100644
--- a/src/gn/string_utils.h
+++ b/src/gn/string_utils.h
@@ -14,7 +14,7 @@
 class Token;
 class Value;
 
-inline std::string operator+(const std::string& a, const std::string_view& b) {
+inline std::string operator+(const std::string& a, std::string_view b) {
   std::string ret;
   ret.reserve(a.size() + b.size());
   ret.assign(a);
@@ -22,7 +22,7 @@
   return ret;
 }
 
-inline std::string operator+(const std::string_view& a, const std::string& b) {
+inline std::string operator+(std::string_view a, const std::string& b) {
   std::string ret;
   ret.reserve(a.size() + b.size());
   ret.assign(a.data(), a.size());
@@ -40,14 +40,14 @@
 // Returns the minimum number of inserts, deleted, and replacements of
 // characters needed to transform s1 to s2, or max_edit_distance + 1 if
 // transforming s1 into s2 isn't possible in at most max_edit_distance steps.
-size_t EditDistance(const std::string_view& s1,
-                    const std::string_view& s2,
+size_t EditDistance(std::string_view s1,
+                    std::string_view s2,
                     size_t max_edit_distance);
 
 // Given a string |text| and a vector of correctly-spelled strings |words|,
 // returns the first string in |words| closest to |text|, or an empty
 // std::string_view if none of the strings in |words| is close.
-std::string_view SpellcheckString(const std::string_view& text,
+std::string_view SpellcheckString(std::string_view text,
                                   const std::vector<std::string_view>& words);
 
 // Reads stdin until end-of-data and returns what it read.
diff --git a/src/gn/token.cc b/src/gn/token.cc
index 3af9c48..ea5139f 100644
--- a/src/gn/token.cc
+++ b/src/gn/token.cc
@@ -9,12 +9,11 @@
 
 Token::Token() : type_(INVALID), value_() {}
 
-Token::Token(const Location& location, Type t, const std::string_view& v)
+Token::Token(const Location& location, Type t, std::string_view v)
     : type_(t), value_(v), location_(location) {}
 
 // static
-Token Token::ClassifyAndMake(const Location& location,
-                             const std::string_view& v) {
+Token Token::ClassifyAndMake(const Location& location, std::string_view v) {
   char first = v.size() > 0 ? v[0] : '\0';
   char second = v.size() > 1 ? v[1] : '\0';
   return Token(location, Tokenizer::ClassifyToken(first, second), v);
diff --git a/src/gn/token.h b/src/gn/token.h
index a11807a..6a90872 100644
--- a/src/gn/token.h
+++ b/src/gn/token.h
@@ -58,13 +58,12 @@
   };
 
   Token();
-  Token(const Location& location, Type t, const std::string_view& v);
+  Token(const Location& location, Type t, std::string_view v);
 
-  static Token ClassifyAndMake(const Location& location,
-                               const std::string_view& v);
+  static Token ClassifyAndMake(const Location& location, std::string_view v);
 
   Type type() const { return type_; }
-  const std::string_view& value() const { return value_; }
+  std::string_view value() const { return value_; }
   const Location& location() const { return location_; }
   void set_location(Location location) { location_ = location; }
   LocationRange range() const {
diff --git a/src/gn/tokenizer.cc b/src/gn/tokenizer.cc
index 93a6425..a2f0034 100644
--- a/src/gn/tokenizer.cc
+++ b/src/gn/tokenizer.cc
@@ -156,7 +156,7 @@
 }
 
 // static
-size_t Tokenizer::ByteOffsetOfNthLine(const std::string_view& buf, int n) {
+size_t Tokenizer::ByteOffsetOfNthLine(std::string_view buf, int n) {
   DCHECK_GT(n, 0);
 
   if (n == 1)
@@ -176,7 +176,7 @@
 }
 
 // static
-bool Tokenizer::IsNewline(const std::string_view& buffer, size_t offset) {
+bool Tokenizer::IsNewline(std::string_view buffer, size_t offset) {
   DCHECK(offset < buffer.size());
   // We may need more logic here to handle different line ending styles.
   return buffer[offset] == '\n';
diff --git a/src/gn/tokenizer.h b/src/gn/tokenizer.h
index d4b347b..0af3a36 100644
--- a/src/gn/tokenizer.h
+++ b/src/gn/tokenizer.h
@@ -40,11 +40,11 @@
   //
   // This is a helper function for error output so that the tokenizer's
   // notion of lines can be used elsewhere.
-  static size_t ByteOffsetOfNthLine(const std::string_view& buf, int n);
+  static size_t ByteOffsetOfNthLine(std::string_view buf, int n);
 
   // Returns true if the given offset of the string piece counts as a newline.
   // The offset must be in the buffer.
-  static bool IsNewline(const std::string_view& buffer, size_t offset);
+  static bool IsNewline(std::string_view buffer, size_t offset);
 
   static bool IsIdentifierFirstChar(char c);
 
diff --git a/src/gn/visibility.cc b/src/gn/visibility.cc
index eb99a27..8fb5e7f 100644
--- a/src/gn/visibility.cc
+++ b/src/gn/visibility.cc
@@ -22,7 +22,7 @@
 Visibility::~Visibility() = default;
 
 bool Visibility::Set(const SourceDir& current_dir,
-                     const std::string_view& source_root,
+                     std::string_view source_root,
                      const Value& value,
                      Err* err) {
   patterns_.clear();
diff --git a/src/gn/visibility.h b/src/gn/visibility.h
index fc16731..f0ebcf5 100644
--- a/src/gn/visibility.h
+++ b/src/gn/visibility.h
@@ -32,7 +32,7 @@
   // Set the visibility to the thing specified by the given value. On failure,
   // returns false and sets the error.
   bool Set(const SourceDir& current_dir,
-           const std::string_view& source_root,
+           std::string_view source_root,
            const Value& value,
            Err* err);
 
diff --git a/src/gn/xcode_object.cc b/src/gn/xcode_object.cc
index 0761b4f..1d08f22 100644
--- a/src/gn/xcode_object.cc
+++ b/src/gn/xcode_object.cc
@@ -143,7 +143,7 @@
     {"y", "sourcecode.yacc"},
 };
 
-const char* GetSourceType(const std::string_view& ext) {
+const char* GetSourceType(std::string_view ext) {
   for (size_t i = 0; i < std::size(kSourceTypeForExt); ++i) {
     if (kSourceTypeForExt[i].ext == ext)
       return kSourceTypeForExt[i].source_type;
@@ -152,11 +152,11 @@
   return "text";
 }
 
-bool HasExplicitFileType(const std::string_view& ext) {
+bool HasExplicitFileType(std::string_view ext) {
   return ext == "dart";
 }
 
-bool IsSourceFileForIndexing(const std::string_view& ext) {
+bool IsSourceFileForIndexing(std::string_view ext) {
   return ext == "c" || ext == "cc" || ext == "cpp" || ext == "cxx" ||
          ext == "m" || ext == "mm";
 }
diff --git a/src/gn/xml_element_writer.cc b/src/gn/xml_element_writer.cc
index 8525057..f888915 100644
--- a/src/gn/xml_element_writer.cc
+++ b/src/gn/xml_element_writer.cc
@@ -8,13 +8,13 @@
 
 XmlAttributes::XmlAttributes() = default;
 
-XmlAttributes::XmlAttributes(const std::string_view& attr_key,
-                             const std::string_view& attr_value) {
+XmlAttributes::XmlAttributes(std::string_view attr_key,
+                             std::string_view attr_value) {
   add(attr_key, attr_value);
 }
 
-XmlAttributes& XmlAttributes::add(const std::string_view& attr_key,
-                                  const std::string_view& attr_value) {
+XmlAttributes& XmlAttributes::add(std::string_view attr_key,
+                                  std::string_view attr_value) {
   push_back(std::make_pair(attr_key, attr_value));
   return *this;
 }
@@ -50,7 +50,7 @@
   }
 }
 
-void XmlElementWriter::Text(const std::string_view& content) {
+void XmlElementWriter::Text(std::string_view content) {
   StartContent(false);
   out_ << content;
 }
diff --git a/src/gn/xml_element_writer.h b/src/gn/xml_element_writer.h
index 9040d16..6229f88 100644
--- a/src/gn/xml_element_writer.h
+++ b/src/gn/xml_element_writer.h
@@ -19,11 +19,9 @@
     : public std::vector<std::pair<std::string_view, std::string_view>> {
  public:
   XmlAttributes();
-  XmlAttributes(const std::string_view& attr_key,
-                const std::string_view& attr_value);
+  XmlAttributes(std::string_view attr_key, std::string_view attr_value);
 
-  XmlAttributes& add(const std::string_view& attr_key,
-                     const std::string_view& attr_value);
+  XmlAttributes& add(std::string_view attr_key, std::string_view attr_value);
 };
 
 // Helper class for writing XML elements. New XML element is started in
@@ -54,7 +52,7 @@
   ~XmlElementWriter();
 
   // Writes arbitrary XML element text.
-  void Text(const std::string_view& content);
+  void Text(std::string_view content);
 
   // Starts new XML sub-element. Caller must ensure that parent element outlives
   // its children.
