Use c++20 in GN build
Change-Id: I45d6b140f68e7e0bdd885420952e46e2576e960d
Reviewed-on: https://gn-review.googlesource.com/c/gn/+/16200
Reviewed-by: David Turner <digit@google.com>
Commit-Queue: Takuto Ikuta <tikuta@google.com>
diff --git a/build/gen.py b/build/gen.py
index 232e536..07b699b 100755
--- a/build/gen.py
+++ b/build/gen.py
@@ -466,7 +466,7 @@
'-Wextra-semi',
'-Wundef',
- '-std=c++17'
+ '-std=c++20'
])
# flags not supported by gcc/g++.
@@ -482,7 +482,7 @@
ldflags.append('-static-libstdc++')
if platform.is_mingw() or platform.is_msys():
- cflags.remove('-std=c++17')
+ cflags.remove('-std=c++20')
cflags.extend([
'-Wno-deprecated-copy',
'-Wno-implicit-fallthrough',
@@ -491,7 +491,7 @@
'-Wno-format', # Use of %llx, which is supported by _UCRT, false positive
'-Wno-strict-aliasing', # Dereferencing punned pointer
'-Wno-cast-function-type', # Casting FARPROC to RegDeleteKeyExPtr
- '-std=gnu++17',
+ '-std=gnu++20',
])
else:
# This is needed by libc++.
@@ -561,7 +561,7 @@
'/wd4505',
'/wd4838',
'/wd4996',
- '/std:c++17',
+ '/std:c++20',
'/GR-',
'/D_HAS_EXCEPTIONS=0',
])
diff --git a/src/base/files/file_path.cc b/src/base/files/file_path.cc
index 1959133..3b53abc 100644
--- a/src/base/files/file_path.cc
+++ b/src/base/files/file_path.cc
@@ -8,6 +8,7 @@
#include <algorithm>
#include <iterator>
+#include <string>
#include <string_view>
#include "base/logging.h"
@@ -623,8 +624,9 @@
FilePath FilePath::NormalizePathSeparatorsTo(CharType separator) const {
#if defined(FILE_PATH_USES_WIN_SEPARATORS)
- DCHECK_NE(kSeparators + kSeparatorsLength,
- std::find(kSeparators, kSeparators + kSeparatorsLength, separator));
+ DCHECK_NE(static_cast<const void*>(kSeparators + kSeparatorsLength),
+ static_cast<const void*>(std::find(
+ kSeparators, kSeparators + kSeparatorsLength, separator)));
StringType copy = path_;
for (size_t i = 0; i < kSeparatorsLength; ++i) {
std::replace(copy.begin(), copy.end(), kSeparators[i], separator);
diff --git a/src/base/strings/string_util.cc b/src/base/strings/string_util.cc
index 5af7715..e1b494d 100644
--- a/src/base/strings/string_util.cc
+++ b/src/base/strings/string_util.cc
@@ -19,6 +19,7 @@
#include <algorithm>
#include <iterator>
#include <limits>
+#include <string>
#include <vector>
#include "base/logging.h"
@@ -963,7 +964,7 @@
--i;
} else {
if (*i < '1' || *i > '9') {
- DLOG(ERROR) << "Invalid placeholder: $" << *i;
+ DLOG(ERROR) << "Invalid placeholder: $" << std::to_string(*i);
continue;
}
uintptr_t index = *i - '1';
diff --git a/src/base/value_iterators.cc b/src/base/value_iterators.cc
index ba9c730..4765f73 100644
--- a/src/base/value_iterators.cc
+++ b/src/base/value_iterators.cc
@@ -4,6 +4,8 @@
#include "base/value_iterators.h"
+#include "base/values.h"
+
namespace base {
namespace detail {
diff --git a/src/gn/substitution_type.h b/src/gn/substitution_type.h
index d359a30..2d0c3bc 100644
--- a/src/gn/substitution_type.h
+++ b/src/gn/substitution_type.h
@@ -15,8 +15,10 @@
// Each pair here represents the string representation of the substitution in GN
// and in Ninja.
struct Substitution {
- const char* name;
- const char* ninja_name;
+ const char* name = nullptr;
+ const char* ninja_name = nullptr;
+ Substitution(const char* name, const char* ninja_name)
+ : name(name), ninja_name(ninja_name) {}
Substitution(const Substitution&) = delete;
Substitution& operator=(const Substitution&) = delete;
};