diff --git a/src/tag/Item.hxx b/src/tag/Item.hxx
index ea9385a28..b67eac469 100644
--- a/src/tag/Item.hxx
+++ b/src/tag/Item.hxx
@@ -28,6 +28,10 @@ struct TagItem {
 			type == other.type && std::strcmp(value, other.value) == 0;
 	}
 
+private:
+	/* making the constructor private
+	   to only allow construction by TagPoolItem. */
+	friend struct TagPoolItem;
 	TagItem() = default;
 	TagItem(const TagItem &other) = delete;
 	TagItem &operator=(const TagItem &other) = delete;