mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-27 01:04:03 +00:00
c5598d6a9e
avoid `{type error}` being leaked in user-facing messages, particularly when using the `adt_const_params` feature
113 lines
4.7 KiB
Plaintext
113 lines
4.7 KiB
Plaintext
warning: trait objects without an explicit `dyn` are deprecated
|
|
--> $DIR/ice-hir-wf-check-anon-const-issue-122989.rs:2:20
|
|
|
|
|
LL | trait Foo<const N: Bar<2>> {
|
|
| ^^^^^^
|
|
|
|
|
= warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
|
|
= note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
|
|
= note: `#[warn(bare_trait_objects)]` on by default
|
|
help: if this is a dyn-compatible trait, use `dyn`
|
|
|
|
|
LL | trait Foo<const N: dyn Bar<2>> {
|
|
| +++
|
|
|
|
warning: trait objects without an explicit `dyn` are deprecated
|
|
--> $DIR/ice-hir-wf-check-anon-const-issue-122989.rs:11:20
|
|
|
|
|
LL | trait Bar<const M: Foo<2>> {}
|
|
| ^^^^^^
|
|
|
|
|
= warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
|
|
= note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
|
|
help: if this is a dyn-compatible trait, use `dyn`
|
|
|
|
|
LL | trait Bar<const M: dyn Foo<2>> {}
|
|
| +++
|
|
|
|
error[E0391]: cycle detected when computing type of `Foo::N`
|
|
--> $DIR/ice-hir-wf-check-anon-const-issue-122989.rs:2:11
|
|
|
|
|
LL | trait Foo<const N: Bar<2>> {
|
|
| ^^^^^^^^^^^^^^^
|
|
|
|
|
note: ...which requires computing type of `Bar::M`...
|
|
--> $DIR/ice-hir-wf-check-anon-const-issue-122989.rs:11:11
|
|
|
|
|
LL | trait Bar<const M: Foo<2>> {}
|
|
| ^^^^^^^^^^^^^^^
|
|
= note: ...which again requires computing type of `Foo::N`, completing the cycle
|
|
note: cycle used when computing explicit predicates of trait `Foo`
|
|
--> $DIR/ice-hir-wf-check-anon-const-issue-122989.rs:2:1
|
|
|
|
|
LL | trait Foo<const N: Bar<2>> {
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
= note: see https://rustc-dev-guide.rust-lang.org/overview.html#queries and https://rustc-dev-guide.rust-lang.org/query.html for more information
|
|
|
|
error[E0038]: the trait `Foo` cannot be made into an object
|
|
--> $DIR/ice-hir-wf-check-anon-const-issue-122989.rs:2:24
|
|
|
|
|
LL | trait Foo<const N: Bar<2>> {
|
|
| ^ `Foo` cannot be made into an object
|
|
|
|
|
note: for a trait to be "dyn-compatible" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
|
--> $DIR/ice-hir-wf-check-anon-const-issue-122989.rs:8:8
|
|
|
|
|
LL | trait Foo<const N: Bar<2>> {
|
|
| --- this trait cannot be made into an object...
|
|
...
|
|
LL | fn func() {}
|
|
| ^^^^ ...because associated function `func` has no `self` parameter
|
|
help: consider turning `func` into a method by giving it a `&self` argument
|
|
|
|
|
LL | fn func(&self) {}
|
|
| +++++
|
|
help: alternatively, consider constraining `func` so it does not apply to trait objects
|
|
|
|
|
LL | fn func() where Self: Sized {}
|
|
| +++++++++++++++++
|
|
|
|
error: `(dyn Bar<2> + 'static)` is forbidden as the type of a const generic parameter
|
|
--> $DIR/ice-hir-wf-check-anon-const-issue-122989.rs:2:20
|
|
|
|
|
LL | trait Foo<const N: Bar<2>> {
|
|
| ^^^^^^
|
|
|
|
|
= note: the only supported types are integers, `bool`, and `char`
|
|
|
|
error[E0038]: the trait `Foo` cannot be made into an object
|
|
--> $DIR/ice-hir-wf-check-anon-const-issue-122989.rs:11:11
|
|
|
|
|
LL | trait Bar<const M: Foo<2>> {}
|
|
| ^^^^^^^^^^^^^^^ `Foo` cannot be made into an object
|
|
|
|
|
note: for a trait to be "dyn-compatible" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
|
--> $DIR/ice-hir-wf-check-anon-const-issue-122989.rs:8:8
|
|
|
|
|
LL | trait Foo<const N: Bar<2>> {
|
|
| --- this trait cannot be made into an object...
|
|
...
|
|
LL | fn func() {}
|
|
| ^^^^ ...because associated function `func` has no `self` parameter
|
|
help: consider turning `func` into a method by giving it a `&self` argument
|
|
|
|
|
LL | fn func(&self) {}
|
|
| +++++
|
|
help: alternatively, consider constraining `func` so it does not apply to trait objects
|
|
|
|
|
LL | fn func() where Self: Sized {}
|
|
| +++++++++++++++++
|
|
|
|
error: `(dyn Foo<2> + 'static)` is forbidden as the type of a const generic parameter
|
|
--> $DIR/ice-hir-wf-check-anon-const-issue-122989.rs:11:20
|
|
|
|
|
LL | trait Bar<const M: Foo<2>> {}
|
|
| ^^^^^^
|
|
|
|
|
= note: the only supported types are integers, `bool`, and `char`
|
|
|
|
error: aborting due to 5 previous errors; 2 warnings emitted
|
|
|
|
Some errors have detailed explanations: E0038, E0391.
|
|
For more information about an error, try `rustc --explain E0038`.
|