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_; }