Don't use raw_ptr for GCed types
Change-Id: I087b88e0694b5f2b7a9811a8a130ded5b679e323
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/122810
Commit-Queue: Tom Sepez <tsepez@google.com>
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@google.com>
diff --git a/xfa/fxfa/parser/cxfa_nodeiteratortemplate.h b/xfa/fxfa/parser/cxfa_nodeiteratortemplate.h
index de8512a..95b0efa 100644
--- a/xfa/fxfa/parser/cxfa_nodeiteratortemplate.h
+++ b/xfa/fxfa/parser/cxfa_nodeiteratortemplate.h
@@ -7,12 +7,17 @@
#ifndef XFA_FXFA_PARSER_CXFA_NODEITERATORTEMPLATE_H_
#define XFA_FXFA_PARSER_CXFA_NODEITERATORTEMPLATE_H_
+#include <type_traits>
#include "core/fxcrt/unowned_ptr.h"
#include "v8/include/cppgc/macros.h"
+#include "v8/include/cppgc/type-traits.h"
template <class NodeType,
class TraverseStrategy,
- typename HolderType = UnownedPtr<NodeType>>
+ typename HolderType = std::conditional_t<
+ cppgc::IsGarbageCollectedOrMixinTypeV<NodeType>,
+ NodeType*,
+ UnownedPtr<NodeType>>>
class CXFA_NodeIteratorTemplate {
CPPGC_STACK_ALLOCATED(); // Allows Raw/Unowned |HolderType|.