{
  "$type": "site.standard.document",
  "bskyPostRef": {
    "cid": "bafyreif727tkolrby4gidbfxgtiufdsn5iz3chlhtic7ig7n4lhxzxiika",
    "uri": "at://did:plc:ivbknywyskln22er3nkssdhl/app.bsky.feed.post/3mj32eyzbnqr2"
  },
  "path": "/t/pre-pre-rfc-allow-exclusion-of-trait-methods-for-certain-unsatisfiable-where-bounds/24160#post_4",
  "publishedAt": "2026-04-09T04:19:52.000Z",
  "site": "https://internals.rust-lang.org",
  "tags": [
    "Refinement tracking issue,",
    "Trivial bounds tracking issue,",
    "has an issue,",
    "github.com/rust-lang/rust",
    "Don't require method impls for methods with `Self:Sized` bounds for impls for unsized types (#135480)",
    "oli-obk",
    "+106\n-20",
    ""
  ],
  "textContent": "Related:\n\n  * Refinement tracking issue, so you could write a method without the bounds when they aren't met, and actually make use of it\n  * Trivial bounds tracking issue, so you could write a method with the trivially unmet bounds present without a compiler error\n\n\n\nsteffahn:\n\n> For some reason, `rustc` doesn’t care so much anymore about “impossible” bounds if you add some higher-ranked lifetime to it.\n\nThat has an issue, but is also a workaround for the lack of stable trivial bounds. (As is writing a method without bounds, but you can't currently call it.)\n\nsteffahn:\n\n> This seems like deliberate design, so it’s probably possible to find prior discussion somewhere\n\ngithub.com/rust-lang/rust\n\n####  Don't require method impls for methods with `Self:Sized` bounds for impls for unsized types (#135480)\n\n`master` ← `oli-obk:sized-method-on-unsized-impl`\n\nopened 11:39AM - 14 Jan 25 UTC\n\n\n\n            oli-obk\n          \n\n\n+106\n-20\n\n\nSimilarly to how #112319 doesn't require specifying associated types with `Self:… Sized` bounds on `dyn Trait`, we now don't require assoc items with `Self: Sized` bounds to be in impls of for unsized types. Additionally we lint assoc items with `Self: Sized` bounds that are in such impls: ```rust trait Foo { fn foo() where Self: Sized; } impl Foo for () { fn foo() {} } impl Foo for i32 {} //~^ ERROR: not all trait items implemented, missing: `foo` impl Foo for dyn std::fmt::Debug {} #[deny(dead_code)] impl Foo for dyn std::fmt::Display { fn foo() {} //~^ ERROR this item cannot be used as its where bounds are not satisfied } ``` Note that this works with the same `Self: Sized` specific logic we already have for `dyn Trait`, so no new capabilities like avoiding assoc items with `Self: Copy` bounds on impls for `String` or such are added here. Specifying `where ConcreteType: Sized` in a trait and implementing the trait for `ConcreteType` also does not work, it *must* be exactly `Self: Sized`.",
  "title": "[Pre-pre RFC] Allow exclusion of trait methods for (certain) unsatisfiable where bounds"
}