diff --git a/core/fpdfapi/page/cpdf_colorspace.cpp b/core/fpdfapi/page/cpdf_colorspace.cpp
index 7893df3..4a0aebe 100644
--- a/core/fpdfapi/page/cpdf_colorspace.cpp
+++ b/core/fpdfapi/page/cpdf_colorspace.cpp
@@ -512,7 +512,7 @@
     return nullptr;
   }
 
-  ScopedSetInsertion<const CPDF_Object*> insertion(pVisited, pObj);
+  ScopedSetInsertion insertion(pVisited, pObj);
 
   if (pObj->IsName()) {
     return GetStockCSForName(pObj->GetString());
diff --git a/core/fpdfapi/page/cpdf_docpagedata.cpp b/core/fpdfapi/page/cpdf_docpagedata.cpp
index c832aac..a27fcc9 100644
--- a/core/fpdfapi/page/cpdf_docpagedata.cpp
+++ b/core/fpdfapi/page/cpdf_docpagedata.cpp
@@ -310,7 +310,7 @@
     return nullptr;
   }
 
-  ScopedSetInsertion<const CPDF_Object*> insertion(pVisitedInternal, pCSObj);
+  ScopedSetInsertion insertion(pVisitedInternal, pCSObj);
 
   if (pCSObj->IsName()) {
     ByteString name = pCSObj->GetString();
diff --git a/core/fpdfapi/page/cpdf_function.cpp b/core/fpdfapi/page/cpdf_function.cpp
index 8b0ccdb..3d5d174 100644
--- a/core/fpdfapi/page/cpdf_function.cpp
+++ b/core/fpdfapi/page/cpdf_function.cpp
@@ -58,7 +58,7 @@
     return nullptr;
   }
 
-  ScopedSetInsertion<VisitedSet::value_type> insertion(pVisited, pFuncObj);
+  ScopedSetInsertion insertion(pVisited, pFuncObj);
 
   int iType = -1;
   if (const CPDF_Stream* pStream = pFuncObj->AsStream()) {
diff --git a/core/fpdfapi/page/cpdf_streamcontentparser.cpp b/core/fpdfapi/page/cpdf_streamcontentparser.cpp
index 826d7c7..3ad222b 100644
--- a/core/fpdfapi/page/cpdf_streamcontentparser.cpp
+++ b/core/fpdfapi/page/cpdf_streamcontentparser.cpp
@@ -1647,8 +1647,8 @@
 
   stream_start_offsets_ = stream_start_offsets;
 
-  ScopedSetInsertion<const uint8_t*> scoped_insert(
-      &recursion_state_->parsed_set, pDataStart.data());
+  ScopedSetInsertion scoped_insert(&recursion_state_->parsed_set,
+                                   pDataStart.data());
 
   uint32_t init_obj_count = object_holder_->GetPageObjectCount();
   AutoNuller<std::unique_ptr<CPDF_StreamParser>> auto_clearer(&syntax_);
diff --git a/core/fpdfapi/parser/cpdf_document.cpp b/core/fpdfapi/parser/cpdf_document.cpp
index add8788..e13c159 100644
--- a/core/fpdfapi/parser/cpdf_document.cpp
+++ b/core/fpdfapi/parser/cpdf_document.cpp
@@ -90,8 +90,7 @@
     NodeType kid_type = GetNodeType(kid_dict);
     if (kid_type == NodeType::kBranch) {
       // Use |visited_pages| to help detect circular references of pages.
-      ScopedSetInsertion<RetainPtr<CPDF_Dictionary>> local_add(visited_pages,
-                                                               kid_dict);
+      ScopedSetInsertion local_add(visited_pages, kid_dict);
       std::optional<int> local_count =
           CountPages(std::move(kid_dict), visited_pages);
       if (!local_count.has_value()) {
@@ -553,7 +552,7 @@
       return false;
     }
 
-    ScopedSetInsertion<RetainPtr<CPDF_Dictionary>> insertion(visited, kid_dict);
+    ScopedSetInsertion insertion(visited, kid_dict);
     if (!InsertDeletePDFPage(std::move(kid_dict), pages_to_go, page_dict,
                              is_insert, visited)) {
       return false;
diff --git a/core/fpdfapi/parser/cpdf_parser.cpp b/core/fpdfapi/parser/cpdf_parser.cpp
index 66f19e3..e181187 100644
--- a/core/fpdfapi/parser/cpdf_parser.cpp
+++ b/core/fpdfapi/parser/cpdf_parser.cpp
@@ -1070,7 +1070,7 @@
     return nullptr;
   }
 
-  ScopedSetInsertion<uint32_t> local_insert(&parsing_obj_nums_, objnum);
+  ScopedSetInsertion local_insert(&parsing_obj_nums_, objnum);
   const auto* info = cross_ref_table_->GetObjectInfo(objnum);
   if (!info) {
     return nullptr;
@@ -1119,7 +1119,7 @@
   }
 
   // Keep track of `object_number` before doing more parsing.
-  ScopedSetInsertion<uint32_t> local_insert(&parsing_obj_nums_, object_number);
+  ScopedSetInsertion local_insert(&parsing_obj_nums_, object_number);
 
   RetainPtr<CPDF_Object> object =
       ParseIndirectObjectAt(object_pos, object_number);
diff --git a/core/fxcrt/scoped_set_insertion_unittest.cpp b/core/fxcrt/scoped_set_insertion_unittest.cpp
index 6a6b990..3b188cd 100644
--- a/core/fxcrt/scoped_set_insertion_unittest.cpp
+++ b/core/fxcrt/scoped_set_insertion_unittest.cpp
@@ -4,17 +4,19 @@
 
 #include "core/fxcrt/scoped_set_insertion.h"
 
+#include <set>
+
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 TEST(fxcrt, ScopedSetInsertion) {
   std::set<int> container;
   {
-    ScopedSetInsertion<int> insertion(&container, 5);
+    ScopedSetInsertion insertion(&container, 5);
     EXPECT_THAT(container, testing::UnorderedElementsAreArray({5}));
 
     {
-      ScopedSetInsertion<int> insertion2(&container, 6);
+      ScopedSetInsertion insertion2(&container, 6);
       EXPECT_THAT(container, testing::UnorderedElementsAreArray({5, 6}));
     }
 
