Auto merge of #106210 - fee1-dead-contrib:const-closure-trait-method, r=compiler-errors
Allow trait method paths to satisfy const Fn bounds r? `@oli-obk`
This commit is contained in:
commit
973a4db8d5
6 changed files with 100 additions and 13 deletions
|
|
@ -0,0 +1,19 @@
|
|||
#![feature(const_trait_impl)]
|
||||
|
||||
#[const_trait]
|
||||
trait Tr {
|
||||
fn a(self) -> i32;
|
||||
}
|
||||
|
||||
impl Tr for () {
|
||||
fn a(self) -> i32 { 42 }
|
||||
}
|
||||
|
||||
const fn need_const_closure<T: ~const FnOnce(()) -> i32>(x: T) -> i32 {
|
||||
x(())
|
||||
}
|
||||
|
||||
const _: () = assert!(need_const_closure(Tr::a) == 42);
|
||||
//~^ ERROR: the trait bound
|
||||
|
||||
fn main() {}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
error[E0277]: the trait bound `(): ~const Tr` is not satisfied in `fn(()) -> i32 {<() as Tr>::a}`
|
||||
--> $DIR/const-closure-trait-method-fail.rs:16:42
|
||||
|
|
||||
LL | const _: () = assert!(need_const_closure(Tr::a) == 42);
|
||||
| ------------------ ^^^^^ within `fn(()) -> i32 {<() as Tr>::a}`, the trait `~const Tr` is not implemented for `()`
|
||||
| |
|
||||
| required by a bound introduced by this call
|
||||
|
|
||||
note: the trait `Tr` is implemented for `()`, but that implementation is not `const`
|
||||
--> $DIR/const-closure-trait-method-fail.rs:16:42
|
||||
|
|
||||
LL | const _: () = assert!(need_const_closure(Tr::a) == 42);
|
||||
| ^^^^^
|
||||
= note: required because it appears within the type `fn(()) -> i32 {<() as Tr>::a}`
|
||||
note: required by a bound in `need_const_closure`
|
||||
--> $DIR/const-closure-trait-method-fail.rs:12:32
|
||||
|
|
||||
LL | const fn need_const_closure<T: ~const FnOnce(()) -> i32>(x: T) -> i32 {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `need_const_closure`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
// check-pass
|
||||
#![feature(const_trait_impl)]
|
||||
|
||||
#[const_trait]
|
||||
trait Tr {
|
||||
fn a(self) -> i32;
|
||||
}
|
||||
|
||||
impl const Tr for () {
|
||||
fn a(self) -> i32 { 42 }
|
||||
}
|
||||
|
||||
const fn need_const_closure<T: ~const FnOnce(()) -> i32>(x: T) -> i32 {
|
||||
x(())
|
||||
}
|
||||
|
||||
const _: () = assert!(need_const_closure(Tr::a) == 42);
|
||||
|
||||
fn main() {}
|
||||
Loading…
Add table
Add a link
Reference in a new issue