diff options
| author | Yuki Okushi <huyuumi.dev+love@gmail.com> | 2022-11-23 06:40:22 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-11-23 06:40:22 +0900 |
| commit | ecf2536b038f0a17ce478d6bcdeff39e91c0a9de (patch) | |
| tree | 9604b26c65b442c4a40025fd77eb26df102b46f7 | |
| parent | b162bb42707ad1afcd4b8c7fd3bdb6cb1810ae1d (diff) | |
| parent | 2d5d692053590aa173ffebd3d5fc9707dc39ea9f (diff) | |
| download | rust-ecf2536b038f0a17ce478d6bcdeff39e91c0a9de.tar.gz rust-ecf2536b038f0a17ce478d6bcdeff39e91c0a9de.zip | |
Rollup merge of #104717 - GuillaumeGomez:test-projection-used-as-const-generic, r=oli-obk
Add failing test for projections used as const generic Based on the experiment done in https://github.com/rust-lang/rust/pull/104443, we realized it's currently not possible to support projections in const generics. More information about it in https://github.com/rust-lang/rust/pull/104443#discussion_r1029375633. This PR adds the UI test in any case so we can gather data in order to work towards adding `TyAlias` into the ABI in the future. r? ``@oli-obk``
| -rw-r--r-- | src/test/ui/const-generics/projection-as-arg-const.rs | 20 | ||||
| -rw-r--r-- | src/test/ui/const-generics/projection-as-arg-const.stderr | 11 |
2 files changed, 31 insertions, 0 deletions
diff --git a/src/test/ui/const-generics/projection-as-arg-const.rs b/src/test/ui/const-generics/projection-as-arg-const.rs new file mode 100644 index 00000000000..903548c75db --- /dev/null +++ b/src/test/ui/const-generics/projection-as-arg-const.rs @@ -0,0 +1,20 @@ +// This is currently not possible to use projections as const generics. +// More information about this available here: +// https://github.com/rust-lang/rust/pull/104443#discussion_r1029375633 + +pub trait Identity { + type Identity; +} + +impl<T> Identity for T { + type Identity = Self; +} + +pub fn foo<const X: <i32 as Identity>::Identity>() { +//~^ ERROR + assert!(X == 12); +} + +fn main() { + foo::<12>(); +} diff --git a/src/test/ui/const-generics/projection-as-arg-const.stderr b/src/test/ui/const-generics/projection-as-arg-const.stderr new file mode 100644 index 00000000000..803ed9c9597 --- /dev/null +++ b/src/test/ui/const-generics/projection-as-arg-const.stderr @@ -0,0 +1,11 @@ +error: `<i32 as Identity>::Identity` is forbidden as the type of a const generic parameter + --> $DIR/projection-as-arg-const.rs:13:21 + | +LL | pub fn foo<const X: <i32 as Identity>::Identity>() { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | + = note: the only supported types are integers, `bool` and `char` + = help: more complex types are supported with `#![feature(adt_const_params)]` + +error: aborting due to previous error + |
