Of course, one can work around this by making a type alias with a different name, but that would be unnecessarily confusing for the user (having to know the difference between Foo and FooWithLifetime<'a>).
Would appreciate pointers to previous discussion as to why default generic parameters are possible, but default lifetimes aren't.
There's previous discussion, I don't have any links off the top of my head. I one problem is that currently Foo (without the lifetime specified, for a struct Foo<'a>) already has a meaning; the same meaning as Foo<'_> for inferred or elided lifetimes. (Using this syntax is discouraged though since it hides lifetimes and in particular lifetime dependencies in method signatures like fn f(&self) -> Foo.)
currently Foo (without the lifetime specified, for a struct Foo<'a>) already has a meaning; the same meaning as Foo<'_> for inferred or elided lifetimes
Ah yeah, forgot about that, that's unfortunate!
Would have been interesting to see how such a feature could have evolved though: