Description
Qualified path patterns can only refer to associated constants
How about this? -> <Enum>::A
Couldn't this be used as a qualified path pattern, for example in match arms?
Bounds that don't use the item's parameters or higher-ranked lifetimes are checked when the item is defined. It is an error for such a bound to be false
This below is not checked on definition:
// Compiles on its own
// vvvvvvv higher-ranked trait bound (HRTB)
fn foo() where for<'a> String: Copy {}
fn main() {
// error to call it (this is where the HRTB is checked)
foo();
}
And this is checked on definition:
struct A<'a, T>
where
i32: Iterator, // Error: `i32` is not an iterator
{
f: &'a T,
}
fn main() {
}
So it looks like bounds that don't use the item's parameters are checked on definition, but higher-ranked lifetimes are not.
Apart from lifetime extension, the temporary scope of an expression is the smallest scope that contains the expression and is one of the following:
(...)
- The second operand of a lazy boolean expression.
It looks like LHS is a temporary scope, too.
Playground example provided by @CAD97 from rust.internals
(forum discussion)