Make Extension a template
diff --git a/src/hb-ot-layout-gsub-table.hh b/src/hb-ot-layout-gsub-table.hh
index 7f23dec..7cf1e1b 100644
--- a/src/hb-ot-layout-gsub-table.hh
+++ b/src/hb-ot-layout-gsub-table.hh
@@ -878,7 +878,7 @@
 
 struct ChainContextSubst : ChainContext {};
 
-struct ExtensionSubst : Extension
+struct ExtensionSubst : Extension<ExtensionSubst>
 {
   inline const struct SubstLookupSubTable& get_subtable (void) const
   {
@@ -887,9 +887,6 @@
     return StructAtOffset<SubstLookupSubTable> (this, offset);
   }
 
-  template <typename context_t>
-  inline typename context_t::return_t process (context_t *c) const;
-
   inline bool sanitize (hb_sanitize_context_t *c);
 
   inline bool is_reverse (void) const;
@@ -1380,12 +1377,6 @@
 
 /* Out-of-class implementation for methods recursing */
 
-template <typename context_t>
-inline typename context_t::return_t ExtensionSubst::process (context_t *c) const
-{
-  return get_subtable ().process (c, get_type ());
-}
-
 inline bool ExtensionSubst::sanitize (hb_sanitize_context_t *c)
 {
   TRACE_SANITIZE (this);