diff --git a/src/expand.rs b/src/expand.rs
index aac8e46..fb83df1 100644
--- a/src/expand.rs
+++ b/src/expand.rs
@@ -72,7 +72,9 @@
                         if let Some(block) = block {
                             has_self |= has_self_in_block(block);
                             transform_block(context, sig, block, has_self, is_local);
-                            method.attrs.push(parse_quote!(#[allow(clippy::used_underscore_binding)]));
+                            method
+                                .attrs
+                                .push(parse_quote!(#[allow(clippy::used_underscore_binding)]));
                         }
                         let has_default = method.default.is_some();
                         transform_sig(context, sig, has_self, has_default, is_local);
@@ -102,7 +104,9 @@
                         let has_self = has_self_in_sig(sig) || has_self_in_block(block);
                         transform_block(context, sig, block, has_self, is_local);
                         transform_sig(context, sig, has_self, false, is_local);
-                        method.attrs.push(parse_quote!(#[allow(clippy::used_underscore_binding)]));
+                        method
+                            .attrs
+                            .push(parse_quote!(#[allow(clippy::used_underscore_binding)]));
                     }
                 }
             }
@@ -414,10 +418,22 @@
             if !is_local {
                 self_param.bounds.extend(self_bound);
             }
+            let count = standalone
+                .generics
+                .params
+                .iter()
+                .take_while(|param| {
+                    if let GenericParam::Const(_) = param {
+                        false
+                    } else {
+                        true
+                    }
+                })
+                .count();
             standalone
                 .generics
                 .params
-                .push(GenericParam::Type(self_param));
+                .insert(count, GenericParam::Type(self_param));
             types.push(Ident::new("Self", Span::call_site()));
         }
     }
diff --git a/src/lib.rs b/src/lib.rs
index f0102d8..929af4f 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -303,6 +303,8 @@
 //! let object = &value as &dyn ObjectSafe;
 //! ```
 
+#![allow(clippy::match_like_matches_macro)] // matches! requires Rust 1.42
+
 extern crate proc_macro;
 
 mod args;
