Ah, I see. It hadn't occured to me that whether a trait is implemented for a type or not could depend on a lifetime. Perhaps because I don't think I have ever written such a trait impl myself. Presumably:
impl<'a> Bar for &'a u32 {}
fn func<T: ~Bar>(t: T) -> bool {
t.implements::<Bar>()
}
would also work, as the trait is implemented for all possible lifetimes.
If so, then I agree with your assessment that this would be good enough for the vast majority of use cases. It would probably require a bit of effort to be put into the error messages to explain the situation, but that's nothing new for rustc