External Publication
Visit Post

Idea: trait methods with un-overridable implementations

Rust Internals [Unofficial] March 12, 2026
Source

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

Loading comments...