Use function template for pass-thru argument
diff --git a/src/hb-open-type-private.hh b/src/hb-open-type-private.hh
index a240fdb..72dd3c8 100644
--- a/src/hb-open-type-private.hh
+++ b/src/hb-open-type-private.hh
@@ -451,15 +451,8 @@
     Type &obj = StructAtOffset<Type> (*CharP(base), offset);
     return likely (obj.sanitize (SANITIZE_ARG)) || neuter (SANITIZE_ARG);
   }
-  inline bool sanitize (SANITIZE_ARG_DEF, void *base, void *base2) {
-    TRACE_SANITIZE ();
-    if (!SANITIZE_SELF ()) return false;
-    unsigned int offset = *this;
-    if (unlikely (!offset)) return true;
-    Type &obj = StructAtOffset<Type> (*CharP(base), offset);
-    return likely (obj.sanitize (SANITIZE_ARG, base2)) || neuter (SANITIZE_ARG);
-  }
-  inline bool sanitize (SANITIZE_ARG_DEF, void *base, unsigned int user_data) {
+  template <typename T>
+  inline bool sanitize (SANITIZE_ARG_DEF, void *base, T user_data) {
     TRACE_SANITIZE ();
     if (!SANITIZE_SELF ()) return false;
     unsigned int offset = *this;
@@ -544,16 +537,8 @@
         return false;
     return true;
   }
-  inline bool sanitize (SANITIZE_ARG_DEF, void *base, void *base2) {
-    TRACE_SANITIZE ();
-    if (!likely (sanitize_shallow (SANITIZE_ARG))) return false;
-    unsigned int count = len;
-    for (unsigned int i = 0; i < count; i++)
-      if (!array()[i].sanitize (SANITIZE_ARG, base, base2))
-        return false;
-    return true;
-  }
-  inline bool sanitize (SANITIZE_ARG_DEF, void *base, unsigned int user_data) {
+  template <typename T>
+  inline bool sanitize (SANITIZE_ARG_DEF, void *base, T user_data) {
     TRACE_SANITIZE ();
     if (!likely (sanitize_shallow (SANITIZE_ARG))) return false;
     unsigned int count = len;
@@ -608,7 +593,8 @@
     TRACE_SANITIZE ();
     return OffsetArrayOf<Type>::sanitize (SANITIZE_ARG, CharP(this));
   }
-  inline bool sanitize (SANITIZE_ARG_DEF, unsigned int user_data) {
+  template <typename T>
+  inline bool sanitize (SANITIZE_ARG_DEF, T user_data) {
     TRACE_SANITIZE ();
     return OffsetArrayOf<Type>::sanitize (SANITIZE_ARG, CharP(this), user_data);
   }