Fixes for C++20 support.
* Use ABSL_CONST_INIT on definitions, not just declarations.
* std::string::reserve() (with no args) is deprecated. I think this use
was just a bug.
* Structs with user-declared constructors are no longer aggregates.
Provide a full constructor.
* std::iterator is gone.
Bug: chromium:1284275
PiperOrigin-RevId: 446760317
diff --git a/quiche/http2/adapter/http2_protocol.cc b/quiche/http2/adapter/http2_protocol.cc
index 7281050..6469d32 100644
--- a/quiche/http2/adapter/http2_protocol.cc
+++ b/quiche/http2/adapter/http2_protocol.cc
@@ -6,15 +6,15 @@
namespace http2 {
namespace adapter {
-const char kHttp2MethodPseudoHeader[] = ":method";
-const char kHttp2SchemePseudoHeader[] = ":scheme";
-const char kHttp2AuthorityPseudoHeader[] = ":authority";
-const char kHttp2PathPseudoHeader[] = ":path";
-const char kHttp2StatusPseudoHeader[] = ":status";
+ABSL_CONST_INIT const char kHttp2MethodPseudoHeader[] = ":method";
+ABSL_CONST_INIT const char kHttp2SchemePseudoHeader[] = ":scheme";
+ABSL_CONST_INIT const char kHttp2AuthorityPseudoHeader[] = ":authority";
+ABSL_CONST_INIT const char kHttp2PathPseudoHeader[] = ":path";
+ABSL_CONST_INIT const char kHttp2StatusPseudoHeader[] = ":status";
-const uint8_t kMetadataFrameType = 0x4d;
-const uint8_t kMetadataEndFlag = 0x04;
-const uint16_t kMetadataExtensionId = 0x4d44;
+ABSL_CONST_INIT const uint8_t kMetadataFrameType = 0x4d;
+ABSL_CONST_INIT const uint8_t kMetadataEndFlag = 0x04;
+ABSL_CONST_INIT const uint16_t kMetadataExtensionId = 0x4d44;
std::pair<absl::string_view, bool> GetStringView(const HeaderRep& rep) {
if (absl::holds_alternative<absl::string_view>(rep)) {
diff --git a/quiche/http2/hpack/huffman/hpack_huffman_encoder_test.cc b/quiche/http2/hpack/huffman/hpack_huffman_encoder_test.cc
index 15ee375..6d73345 100644
--- a/quiche/http2/hpack/huffman/hpack_huffman_encoder_test.cc
+++ b/quiche/http2/hpack/huffman/hpack_huffman_encoder_test.cc
@@ -54,7 +54,7 @@
size_t encoded_size = HuffmanSize(plain_string);
EXPECT_EQ(huffman_encoded.size(), encoded_size);
std::string buffer;
- buffer.reserve();
+ buffer.reserve(huffman_encoded.size());
Encode(plain_string, encoded_size, &buffer);
EXPECT_EQ(buffer, huffman_encoded) << "Error encoding " << plain_string;
}
diff --git a/quiche/quic/core/http/http_constants.cc b/quiche/quic/core/http/http_constants.cc
index ea372cd..39d9f5e 100644
--- a/quiche/quic/core/http/http_constants.cc
+++ b/quiche/quic/core/http/http_constants.cc
@@ -25,7 +25,7 @@
return absl::StrCat("UNSUPPORTED_SETTINGS_TYPE(", identifier, ")");
}
-const absl::string_view kUserAgentHeaderName = "user-agent";
+ABSL_CONST_INIT const absl::string_view kUserAgentHeaderName = "user-agent";
#undef RETURN_STRING_LITERAL // undef for jumbo builds
diff --git a/quiche/quic/core/qpack/qpack_instructions.h b/quiche/quic/core/qpack/qpack_instructions.h
index 212f093..a964242 100644
--- a/quiche/quic/core/qpack/qpack_instructions.h
+++ b/quiche/quic/core/qpack/qpack_instructions.h
@@ -71,6 +71,9 @@
// string literal type to guarantee that all bytes of the instruction are
// consumed.
struct QUIC_EXPORT_PRIVATE QpackInstruction {
+ QpackInstruction(QpackInstructionOpcode opcode, QpackInstructionFields fields)
+ : opcode(std::move(opcode)), fields(std::move(fields)) {}
+
QpackInstruction(const QpackInstruction&) = delete;
const QpackInstruction& operator=(const QpackInstruction&) = delete;
diff --git a/quiche/spdy/core/spdy_intrusive_list.h b/quiche/spdy/core/spdy_intrusive_list.h
index 4fb4967..bbced57 100644
--- a/quiche/spdy/core/spdy_intrusive_list.h
+++ b/quiche/spdy/core/spdy_intrusive_list.h
@@ -268,10 +268,13 @@
// variant of T and the matching qualified link type. Essentially, QualifiedT
// will either be 'T' or 'const T', the latter for a const_iterator.
template <typename QualifiedT, typename QualifiedLinkT>
- class QUICHE_EXPORT_PRIVATE iterator_impl
- : public std::iterator<std::bidirectional_iterator_tag, QualifiedT> {
+ class QUICHE_EXPORT_PRIVATE iterator_impl {
public:
- typedef std::iterator<std::bidirectional_iterator_tag, QualifiedT> base;
+ using iterator_category = std::bidirectional_iterator_tag;
+ using value_type = QualifiedT;
+ using difference_type = std::ptrdiff_t;
+ using pointer = QualifiedT*;
+ using reference = QualifiedT&;
iterator_impl() = default;
iterator_impl(QualifiedLinkT* link) : link_(link) {}
@@ -291,10 +294,8 @@
return link_ != x.link_;
}
- typename base::reference operator*() const { return *operator->(); }
- typename base::pointer operator->() const {
- return link_->cast_to_derived();
- }
+ reference operator*() const { return *operator->(); }
+ pointer operator->() const { return link_->cast_to_derived(); }
QualifiedLinkT* link() const { return link_; }