diff --git a/quiche/common/structured_headers.cc b/quiche/common/structured_headers.cc
index e5b1c94..ac3de1b 100644
--- a/quiche/common/structured_headers.cc
+++ b/quiche/common/structured_headers.cc
@@ -832,6 +832,14 @@
 Item::Item(double value) : value_(value) {}
 Item::Item(bool value) : value_(value) {}
 
+Item::Item(const Item&) = default;
+Item& Item::operator=(const Item&) = default;
+
+Item::Item(Item&&) = default;
+Item& Item::operator=(Item&&) = default;
+
+Item::~Item() = default;
+
 const int64_t* Item::GetIfInteger() const {
   return std::get_if<kIntegerType>(&value_);
 }
@@ -886,6 +894,8 @@
 ParameterizedItem::ParameterizedItem(const ParameterizedItem&) = default;
 ParameterizedItem& ParameterizedItem::operator=(const ParameterizedItem&) =
     default;
+ParameterizedItem::ParameterizedItem(ParameterizedItem&&) = default;
+ParameterizedItem& ParameterizedItem::operator=(ParameterizedItem&&) = default;
 ParameterizedItem::ParameterizedItem(Item id, Parameters ps)
     : item(std::move(id)), params(std::move(ps)) {}
 ParameterizedItem::~ParameterizedItem() = default;
@@ -894,6 +904,9 @@
 ParameterizedMember::ParameterizedMember(const ParameterizedMember&) = default;
 ParameterizedMember& ParameterizedMember::operator=(
     const ParameterizedMember&) = default;
+ParameterizedMember::ParameterizedMember(ParameterizedMember&&) = default;
+ParameterizedMember& ParameterizedMember::operator=(ParameterizedMember&&) =
+    default;
 ParameterizedMember::ParameterizedMember(std::vector<ParameterizedItem> id,
                                          bool member_is_inner_list,
                                          Parameters ps)
@@ -916,13 +929,19 @@
     const ParameterisedIdentifier&) = default;
 ParameterisedIdentifier& ParameterisedIdentifier::operator=(
     const ParameterisedIdentifier&) = default;
+ParameterisedIdentifier::ParameterisedIdentifier(ParameterisedIdentifier&&) =
+    default;
+ParameterisedIdentifier& ParameterisedIdentifier::operator=(
+    ParameterisedIdentifier&&) = default;
 ParameterisedIdentifier::ParameterisedIdentifier(Item id, Parameters ps)
     : identifier(std::move(id)), params(std::move(ps)) {}
 ParameterisedIdentifier::~ParameterisedIdentifier() = default;
 
 Dictionary::Dictionary() = default;
 Dictionary::Dictionary(const Dictionary&) = default;
+Dictionary& Dictionary::operator=(const Dictionary&) = default;
 Dictionary::Dictionary(Dictionary&&) = default;
+Dictionary& Dictionary::operator=(Dictionary&&) = default;
 Dictionary::Dictionary(std::vector<DictionaryMember> members)
     : members_(std::move(members)) {}
 Dictionary::~Dictionary() = default;
diff --git a/quiche/common/structured_headers.h b/quiche/common/structured_headers.h
index d23fe72..a029e9a 100644
--- a/quiche/common/structured_headers.h
+++ b/quiche/common/structured_headers.h
@@ -79,6 +79,14 @@
   Item(const char* value, Item::ItemType type = kStringType);
   Item(std::string value, Item::ItemType type = kStringType);
 
+  Item(const Item&);
+  Item& operator=(const Item&);
+
+  Item(Item&&);
+  Item& operator=(Item&&);
+
+  ~Item();
+
   QUICHE_EXPORT friend bool operator==(const Item&, const Item&);
 
   bool is_null() const { return Type() == kNullType; }
@@ -145,7 +153,7 @@
 
   // Deprecated: Prefer `GetStringStrict()`, `GetToken()`, or
   // `GetByteSequence()`.
-  const std::string& GetString() const {
+  const std::string& GetString() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
     struct Visitor {
       const std::string* operator()(const std::monostate&) { return nullptr; }
       const std::string* operator()(const int64_t&) { return nullptr; }
@@ -203,6 +211,8 @@
   ParameterisedIdentifier();
   ParameterisedIdentifier(const ParameterisedIdentifier&);
   ParameterisedIdentifier& operator=(const ParameterisedIdentifier&);
+  ParameterisedIdentifier(ParameterisedIdentifier&&);
+  ParameterisedIdentifier& operator=(ParameterisedIdentifier&&);
   ParameterisedIdentifier(Item, Parameters);
   ~ParameterisedIdentifier();
 
@@ -219,6 +229,8 @@
   ParameterizedItem();
   ParameterizedItem(const ParameterizedItem&);
   ParameterizedItem& operator=(const ParameterizedItem&);
+  ParameterizedItem(ParameterizedItem&&);
+  ParameterizedItem& operator=(ParameterizedItem&&);
   ParameterizedItem(Item, Parameters);
   ~ParameterizedItem();
 
@@ -239,6 +251,8 @@
   ParameterizedMember();
   ParameterizedMember(const ParameterizedMember&);
   ParameterizedMember& operator=(const ParameterizedMember&);
+  ParameterizedMember(ParameterizedMember&&);
+  ParameterizedMember& operator=(ParameterizedMember&&);
   ParameterizedMember(std::vector<ParameterizedItem>, bool member_is_inner_list,
                       Parameters);
   // Shorthand constructor for a member which is an inner list.
@@ -267,8 +281,9 @@
   Dictionary(Dictionary&&);
   explicit Dictionary(std::vector<DictionaryMember> members);
   ~Dictionary();
-  Dictionary& operator=(const Dictionary&) = default;
-  Dictionary& operator=(Dictionary&&) = default;
+  Dictionary& operator=(const Dictionary&);
+  Dictionary& operator=(Dictionary&&);
+
   iterator begin();
   const_iterator begin() const;
   iterator end();
