Closed
Description
Successor of #61935 and #61383.
This code:
#![feature(const_generics)]
trait Foo {}
impl<const N: usize> Foo for [(); N]
where
Self:FooImpl<{N==0}>
{}
trait FooImpl<const IS_ZERO: bool>{}
impl FooImpl<{0u8==0u8}> for [();0] {}
impl<const N:usize> FooImpl<{0u8!=0u8}> for [();N] {}
fn foo<T: Foo>(v: T) {}
fn main() {
foo([]);
foo([()]);
}
Gives this error message (on nightly):
error: constant expression depends on a generic parameter
--> src/main.rs:6:10
|
6 | Self:FooImpl<{N==0}>
| ^^^^^^^^^^^^^^^
|
= note: this may fail depending on what value the parameter takes
It'd be great if this could work so that you can implement a trait differently for different values of type parameters.
cc @lcnr who suggested to open a new issue for this.
Metadata
Metadata
Assignees
Labels
Area: const generics (parameters and arguments)Category: This is a bug.Call for participation: An issue has been fixed and does not reproduce, but no test has been added.`#![feature(const_generics)]``#![feature(generic_const_exprs)]`Relevant to the compiler team, which will review and decide on the PR/issue.This issue requires a nightly compiler in some way.
Activity
lcnr commentedon Jun 30, 2020
background: his error was introduced in #70107 as the previous state was unsound, see #70107 (comment):
lcnr commentedon Nov 22, 2020
With
feature(const_evaluatable_checked)
this test is now working as expected.Marking as
E-needs-test
.est31 commentedon Nov 22, 2020
@lcnr if I try this:
I get this error:
Using the nightly from playground
1.50.0-nightly (2020-11-21 da384694807172f0ca40)
lcnr commentedon Nov 22, 2020
you need full
const_generics
for this, we should probably add a note here which recommends usingfeature(const_generics)
andfeature(const_evaluatable_checked)
here.est31 commentedon Nov 22, 2020
@lcnr alright that works. I'll file a PR
Add regression test for issue 73899
Rollup merge of rust-lang#79302 - est31:issue_73899_test, r=lcnr