diff --git a/src/fold.rs b/src/fold.rs
index 1d78bef..2a41ccf 100644
--- a/src/fold.rs
+++ b/src/fold.rs
@@ -16,7 +16,7 @@
 /// If you want to ensure that your code handles every variant explicitly, you
 /// need to override each method and monitor future changes to `Folder` in case
 /// a new method with a new default implementation gets introduced.
-pub trait Folder: Sized {
+pub trait Folder {
     // Any additions to this trait should happen in form
     // of a call to a public `noop_*` function that only calls
     // out to the folder again, not other `noop_*` functions.
@@ -171,12 +171,12 @@
 
 
 // -
-pub fn noop_fold_ident<F: Folder>(_: &mut F, _ident: Ident) -> Ident {
+pub fn noop_fold_ident<F: ?Sized + Folder>(_: &mut F, _ident: Ident) -> Ident {
     _ident
 }
 
 // -
-pub fn noop_fold_derive_input<F: Folder>(folder: &mut F,
+pub fn noop_fold_derive_input<F: ?Sized + Folder>(folder: &mut F,
                                          DeriveInput{ ident,
                                                       vis,
                                                       attrs,
@@ -198,7 +198,7 @@
 }
 
 // -
-pub fn noop_fold_ty<F: Folder>(folder: &mut F, ty: Ty) -> Ty {
+pub fn noop_fold_ty<F: ?Sized + Folder>(folder: &mut F, ty: Ty) -> Ty {
     use self::Ty::*;
     match ty {
         Slice(inner) => Slice(inner.lift(|v| folder.fold_ty(v))),
@@ -256,7 +256,7 @@
     }
 }
 
-fn noop_fold_qself<F: Folder>(folder: &mut F, QSelf { ty, position }: QSelf) -> QSelf {
+fn noop_fold_qself<F: ?Sized + Folder>(folder: &mut F, QSelf { ty, position }: QSelf) -> QSelf {
     QSelf {
         ty: Box::new(folder.fold_ty(*(ty))),
         position: position,
@@ -264,7 +264,7 @@
 }
 
 // -
-pub fn noop_fold_generics<F: Folder>(folder: &mut F,
+pub fn noop_fold_generics<F: ?Sized + Folder>(folder: &mut F,
                                      Generics { lifetimes, ty_params, where_clause }: Generics)
                                      -> Generics {
     use self::WherePredicate::*;
@@ -310,7 +310,7 @@
 }
 
 // -
-pub fn noop_fold_ty_param_bound<F: Folder>(folder: &mut F, bound: TyParamBound) -> TyParamBound {
+pub fn noop_fold_ty_param_bound<F: ?Sized + Folder>(folder: &mut F, bound: TyParamBound) -> TyParamBound {
     use self::TyParamBound::*;
     match bound {
         Trait(ty, modifier) => Trait(folder.fold_poly_trait_ref(ty), modifier),
@@ -319,7 +319,7 @@
 }
 
 // -
-pub fn noop_fold_poly_trait_ref<F: Folder>(folder: &mut F, trait_ref: PolyTraitRef)
+pub fn noop_fold_poly_trait_ref<F: ?Sized + Folder>(folder: &mut F, trait_ref: PolyTraitRef)
                                            -> PolyTraitRef {
     PolyTraitRef {
         bound_lifetimes: trait_ref.bound_lifetimes
@@ -329,7 +329,7 @@
 }
 
 // -
-pub fn noop_fold_variant_data<F: Folder>(folder: &mut F,
+pub fn noop_fold_variant_data<F: ?Sized + Folder>(folder: &mut F,
                                          data: VariantData)
                                          -> VariantData {
     use self::VariantData::*;
@@ -341,7 +341,7 @@
 }
 
 // -
-pub fn noop_fold_field<F: Folder>(folder: &mut F, field: Field) -> Field {
+pub fn noop_fold_field<F: ?Sized + Folder>(folder: &mut F, field: Field) -> Field {
     Field {
         ident: field.ident.map(|i| folder.fold_ident(i)),
         vis: noop_fold_vis(folder, field.vis),
@@ -351,7 +351,7 @@
 }
 
 // -
-pub fn noop_fold_variant<F: Folder>(folder: &mut F,
+pub fn noop_fold_variant<F: ?Sized + Folder>(folder: &mut F,
                                     Variant { ident, attrs, data, discriminant }: Variant)
                                     -> Variant {
     Variant {
@@ -363,12 +363,12 @@
 }
 
 // -
-pub fn noop_fold_lifetime<F: Folder>(folder: &mut F, _lifetime: Lifetime) -> Lifetime {
+pub fn noop_fold_lifetime<F: ?Sized + Folder>(folder: &mut F, _lifetime: Lifetime) -> Lifetime {
     Lifetime { ident: folder.fold_ident(_lifetime.ident) }
 }
 
 // -
-pub fn noop_fold_lifetime_def<F: Folder>(folder: &mut F,
+pub fn noop_fold_lifetime_def<F: ?Sized + Folder>(folder: &mut F,
                                          LifetimeDef { attrs, lifetime, bounds }: LifetimeDef)
                                          -> LifetimeDef {
     LifetimeDef {
@@ -379,7 +379,7 @@
 }
 
 // -
-pub fn noop_fold_path<F: Folder>(folder: &mut F, Path { global, segments }: Path) -> Path {
+pub fn noop_fold_path<F: ?Sized + Folder>(folder: &mut F, Path { global, segments }: Path) -> Path {
     Path {
         global: global,
         segments: segments.lift(|s| folder.fold_path_segment(s)),
@@ -387,7 +387,7 @@
 }
 
 // -
-pub fn noop_fold_path_segment<F: Folder>(folder: &mut F,
+pub fn noop_fold_path_segment<F: ?Sized + Folder>(folder: &mut F,
                                          PathSegment { ident, parameters }: PathSegment)
                                          -> PathSegment {
     PathSegment {
@@ -397,7 +397,7 @@
 }
 
 // -
-pub fn noop_fold_path_parameters<F: Folder>(folder: &mut F,
+pub fn noop_fold_path_parameters<F: ?Sized + Folder>(folder: &mut F,
                                             path_parameters: PathParameters)
                                             -> PathParameters {
     use self::PathParameters::*;
@@ -421,7 +421,7 @@
 }
 
 // -
-pub fn noop_fold_assoc_type_binding<F: Folder>(folder: &mut F,
+pub fn noop_fold_assoc_type_binding<F: ?Sized + Folder>(folder: &mut F,
                                                TypeBinding { ident, ty }: TypeBinding)
                                                -> TypeBinding {
     TypeBinding {
@@ -432,12 +432,12 @@
 }
 
 // -
-pub fn noop_fold_attribute<F: Folder>(_: &mut F, _attr: Attribute) -> Attribute {
+pub fn noop_fold_attribute<F: ?Sized + Folder>(_: &mut F, _attr: Attribute) -> Attribute {
     _attr
 }
 
 // -
-pub fn noop_fold_fn_ret_ty<F: Folder>(folder: &mut F, ret_ty: FunctionRetTy) -> FunctionRetTy {
+pub fn noop_fold_fn_ret_ty<F: ?Sized + Folder>(folder: &mut F, ret_ty: FunctionRetTy) -> FunctionRetTy {
     use self::FunctionRetTy::*;
     match ret_ty {
         Default => Default,
@@ -446,7 +446,7 @@
 }
 
 
-pub fn noop_fold_const_expr<F: Folder>(folder: &mut F, expr: ConstExpr) -> ConstExpr {
+pub fn noop_fold_const_expr<F: ?Sized + Folder>(folder: &mut F, expr: ConstExpr) -> ConstExpr {
     use self::ConstExpr::*;
     match expr {
         Call(f, args) => {
@@ -480,11 +480,11 @@
         }
     }
 }
-pub fn noop_fold_lit<F: Folder>(_: &mut F, _lit: Lit) -> Lit {
+pub fn noop_fold_lit<F: ?Sized + Folder>(_: &mut F, _lit: Lit) -> Lit {
     _lit
 }
 
-pub fn noop_fold_tt<F: Folder>(folder: &mut F, tt: TokenTree) -> TokenTree {
+pub fn noop_fold_tt<F: ?Sized + Folder>(folder: &mut F, tt: TokenTree) -> TokenTree {
     use self::TokenTree::*;
     use self::Token::*;
     match tt {
@@ -498,7 +498,7 @@
     }
 }
 
-pub fn noop_fold_mac<F: Folder>(folder: &mut F, Mac { path, tts }: Mac) -> Mac {
+pub fn noop_fold_mac<F: ?Sized + Folder>(folder: &mut F, Mac { path, tts }: Mac) -> Mac {
     Mac {
         path: folder.fold_path(path),
         tts: tts.lift(|tt| noop_fold_tt(folder, tt)),
@@ -506,7 +506,7 @@
 }
 
 #[cfg(feature = "full")]
-pub fn noop_fold_crate<F: Folder>(folder: &mut F, Crate { shebang, attrs, items }: Crate) -> Crate {
+pub fn noop_fold_crate<F: ?Sized + Folder>(folder: &mut F, Crate { shebang, attrs, items }: Crate) -> Crate {
     Crate {
         shebang: shebang,
         attrs: attrs.lift(|a| folder.fold_attribute(a)),
@@ -516,11 +516,11 @@
 }
 
 #[cfg(feature = "full")]
-pub fn noop_fold_block<F: Folder>(folder: &mut F, block: Block) -> Block {
+pub fn noop_fold_block<F: ?Sized + Folder>(folder: &mut F, block: Block) -> Block {
     Block { stmts: block.stmts.lift(|s| folder.fold_stmt(s)) }
 }
 
-fn noop_fold_vis<F: Folder>(folder: &mut F, vis: Visibility) -> Visibility {
+fn noop_fold_vis<F: ?Sized + Folder>(folder: &mut F, vis: Visibility) -> Visibility {
     use self::Visibility::*;
     match vis {
         Crate => Crate,
@@ -531,7 +531,7 @@
 }
 
 #[cfg(feature = "full")]
-pub fn noop_fold_item<F: Folder>(folder: &mut F, Item { ident, vis, attrs, node }: Item) -> Item {
+pub fn noop_fold_item<F: ?Sized + Folder>(folder: &mut F, Item { ident, vis, attrs, node }: Item) -> Item {
     use self::ItemKind::*;
     Item {
         ident: folder.fold_ident(ident.clone()),
@@ -603,7 +603,7 @@
 
 // -
 #[cfg(feature = "full")]
-pub fn noop_fold_expr<F: Folder>(folder: &mut F, Expr { node, attrs }: Expr) -> Expr {
+pub fn noop_fold_expr<F: ?Sized + Folder>(folder: &mut F, Expr { node, attrs }: Expr) -> Expr {
     use self::ExprKind::*;
     Expr {
         node: match node {
@@ -744,7 +744,7 @@
 
 // -
 #[cfg(feature = "full")]
-pub fn noop_fold_foreign_item<F: Folder>(folder: &mut F,
+pub fn noop_fold_foreign_item<F: ?Sized + Folder>(folder: &mut F,
                                          ForeignItem { ident, attrs, node, vis }: ForeignItem)
                                          -> ForeignItem {
     ForeignItem {
@@ -765,7 +765,7 @@
 
 // -
 #[cfg(feature = "full")]
-pub fn noop_fold_pat<F: Folder>(folder: &mut F, pat: Pat) -> Pat {
+pub fn noop_fold_pat<F: ?Sized + Folder>(folder: &mut F, pat: Pat) -> Pat {
     use self::Pat::*;
     match pat {
         Wild => Wild,
@@ -814,7 +814,7 @@
 
 // -
 #[cfg(feature = "full")]
-pub fn noop_fold_fn_decl<F: Folder>(folder: &mut F,
+pub fn noop_fold_fn_decl<F: ?Sized + Folder>(folder: &mut F,
                                     FnDecl { inputs, output, variadic }: FnDecl)
                                     -> FnDecl {
 
@@ -838,7 +838,7 @@
 
 // -
 #[cfg(feature = "full")]
-pub fn noop_fold_trait_item<F: Folder>(folder: &mut F,
+pub fn noop_fold_trait_item<F: ?Sized + Folder>(folder: &mut F,
                                        TraitItem { ident, attrs, node }: TraitItem)
                                        -> TraitItem {
     use self::TraitItemKind::*;
@@ -862,7 +862,7 @@
 
 // -
 #[cfg(feature = "full")]
-pub fn noop_fold_impl_item<F: Folder>(folder: &mut F,
+pub fn noop_fold_impl_item<F: ?Sized + Folder>(folder: &mut F,
                                       ImplItem { ident, vis, defaultness, attrs, node }: ImplItem)
                                       -> ImplItem {
     use self::ImplItemKind::*;
@@ -884,7 +884,7 @@
 
 // -
 #[cfg(feature = "full")]
-pub fn noop_fold_method_sig<F: Folder>(folder: &mut F, MethodSig{unsafety, constness, abi, decl, generics}:MethodSig) -> MethodSig {
+pub fn noop_fold_method_sig<F: ?Sized + Folder>(folder: &mut F, MethodSig{unsafety, constness, abi, decl, generics}:MethodSig) -> MethodSig {
     MethodSig {
         unsafety: unsafety,
         constness: constness,
@@ -897,7 +897,7 @@
 
 // -
 #[cfg(feature = "full")]
-pub fn noop_fold_stmt<F: Folder>(folder: &mut F, stmt: Stmt) -> Stmt {
+pub fn noop_fold_stmt<F: ?Sized + Folder>(folder: &mut F, stmt: Stmt) -> Stmt {
     use self::Stmt::*;
     match stmt {
         Local(local) => Local(local.lift(|l| folder.fold_local(l))),
@@ -915,7 +915,7 @@
 
 // -
 #[cfg(feature = "full")]
-pub fn noop_fold_local<F: Folder>(folder: &mut F, Local { pat, ty, init, attrs }: Local) -> Local {
+pub fn noop_fold_local<F: ?Sized + Folder>(folder: &mut F, Local { pat, ty, init, attrs }: Local) -> Local {
     Local {
         pat: pat.lift(|v| folder.fold_pat(v)),
         ty: ty.map(|v| v.lift(|t| folder.fold_ty(t))),
@@ -925,7 +925,7 @@
 }
 
 #[cfg(feature = "full")]
-pub fn noop_fold_view_path<F: Folder>(folder: &mut F, view_path: ViewPath) -> ViewPath {
+pub fn noop_fold_view_path<F: ?Sized + Folder>(folder: &mut F, view_path: ViewPath) -> ViewPath {
     use self::ViewPath::*;
     match view_path {
         Simple(path, ident) => Simple(folder.fold_path(path), ident.map(|i| folder.fold_ident(i))),
