Idea: trait methods with un-overridable implementations
github.com/rust-lang/rust
final methods should work the same as without it (if it works without it)
opened 09:31AM - 10 Mar 26 UTC
mu001999
I-unsound C-bug T-types A-dyn-trait F-final_associated_functions
Tracking: https://github.com/rust-lang/rust/issues/131179 Found when trying to …use final to impl Error::type_id in https://github.com/rust-lang/rust/pull/153598, this code (play) doesn't work as expected: rust #![feature(final_associated_functions)] trait Tr where Self: 'static, { final fn foo(&self) -> std::any::TypeId { std::any::TypeId::of::<Self>() } } struct Foo; impl Tr for Foo {} struct Bar; impl Tr for Bar {} fn foo(t: &dyn Tr) -> std::any::TypeId { t.foo() } fn main() { assert_ne!(foo(&Foo), foo(&Bar)); } I expected to see this happen: run successfully Instead, this happened: assertion failed. And without final, this will run as expected. ### Meta Build using the Nightly version: 1.96.0-nightly (2026-03-09 2d76d9bc76f27b03b489)
Discussion in the ATmosphere