Skip to content

Commit

Permalink
Rollup merge of rust-lang#104717 - GuillaumeGomez:test-projection-use…
Browse files Browse the repository at this point in the history
…d-as-const-generic, r=oli-obk

Add failing test for projections used as const generic

Based on the experiment done in rust-lang#104443, we realized it's currently not possible to support projections in const generics. More information about it in rust-lang#104443 (comment).

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`
  • Loading branch information
Manishearth authored Nov 22, 2022
2 parents 7c56974 + 2d5d692 commit e105d05
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 0 deletions.
20 changes: 20 additions & 0 deletions src/test/ui/const-generics/projection-as-arg-const.rs
Original file line number Diff line number Diff line change
@@ -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>();
}
11 changes: 11 additions & 0 deletions src/test/ui/const-generics/projection-as-arg-const.stderr
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit e105d05

Please sign in to comment.