const generics update
This commit is contained in:
parent
ee746de3af
commit
7a476c07e1
|
|
@ -98,6 +98,7 @@
|
||||||
- [Generics and substitutions](./generics.md)
|
- [Generics and substitutions](./generics.md)
|
||||||
- [`TypeFolder` and `TypeFoldable`](./ty-fold.md)
|
- [`TypeFolder` and `TypeFoldable`](./ty-fold.md)
|
||||||
- [Generic arguments](./generic_arguments.md)
|
- [Generic arguments](./generic_arguments.md)
|
||||||
|
- [Constants in the type system](./constants.md)
|
||||||
- [Type inference](./type-inference.md)
|
- [Type inference](./type-inference.md)
|
||||||
- [Trait solving](./traits/resolution.md)
|
- [Trait solving](./traits/resolution.md)
|
||||||
- [Early and Late Bound Parameters](./early-late-bound.md)
|
- [Early and Late Bound Parameters](./early-late-bound.md)
|
||||||
|
|
|
||||||
|
|
@ -7,20 +7,20 @@ with the two *additional* variants being `ConstKind::Value` and `ConstKind::Unev
|
||||||
|
|
||||||
## Unevaluated constants
|
## Unevaluated constants
|
||||||
|
|
||||||
*This section talks about what's happening with `feature(const_generics)` enabled.
|
*This section talks about what's happening with `feature(generic_const_exprs)` enabled.
|
||||||
On stable we do not yet supply any generic parameters to anonymous constants,
|
On stable we do not yet supply any generic parameters to anonymous constants,
|
||||||
avoiding most of the issues mentioned here.*
|
avoiding most of the issues mentioned here.*
|
||||||
|
|
||||||
Unless a constant is either a simple literal, e.g. `[u8; 3]` or `foo::<{ 'c' }>()`,
|
Unless a constant is either a simple literal, e.g. `[u8; 3]` or `foo::<{ 'c' }>()`,
|
||||||
or a generic parameter, e.g. `[u8; N]`, converting a constant to its [`ty::Const`] representation
|
or a generic parameter, e.g. `[u8; N]`, converting a constant to its [`ty::Const`] representation
|
||||||
returns an unevaluated constant. Even fully concrete constants which do not depend on a
|
returns an unevaluated constant. Even fully concrete constants which do not depend on
|
||||||
generic parameter are not evaluated right away.
|
generic parameters are not evaluated right away.
|
||||||
|
|
||||||
We do not eagerly evaluate constant as they can be used in the `where`-clauses of their
|
We do not eagerly evaluate constant as they can be used in the `where`-clauses of their
|
||||||
parent item, for example:
|
parent item, for example:
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
#[feature(const_generics, const_evaluatable_checked)]
|
#[feature(generic_const_exprs)]
|
||||||
fn foo<T: Trait>()
|
fn foo<T: Trait>()
|
||||||
where
|
where
|
||||||
[u8; <T as Trait>::ASSOC + 1]: SomeOtherTrait,
|
[u8; <T as Trait>::ASSOC + 1]: SomeOtherTrait,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue