diff options
| author | bors <bors@rust-lang.org> | 2023-12-27 19:24:31 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2023-12-27 19:24:31 +0000 |
| commit | 88d69b72b4ccfd4e4b64451a7a5d9fd23d2249a3 (patch) | |
| tree | ee06621ba34b79cf6fb813a928424d9450fc8ed9 /compiler/rustc_mir_transform/src/coverage/mod.rs | |
| parent | a861c8965eaff66901710cc384a59f6b0b1a7700 (diff) | |
| parent | 3eb48a35c8ae8335da66dc2bdb4f60e6ae22e1dd (diff) | |
| download | rust-88d69b72b4ccfd4e4b64451a7a5d9fd23d2249a3.tar.gz rust-88d69b72b4ccfd4e4b64451a7a5d9fd23d2249a3.zip | |
Auto merge of #119099 - fmease:always-const-trait-bounds, r=fee1-dead
Introduce `const Trait` (always-const trait bounds)
Feature `const_trait_impl` currently lacks a way to express “always const” trait bounds. This makes it impossible to define generic items like fns or structs which contain types that depend on const method calls (\*). While the final design and esp. the syntax of effects / keyword generics isn't set in stone, some version of “always const” trait bounds will very likely form a part of it. Further, their implementation is trivial thanks to the `effects` backbone.
Not sure if this needs t-lang sign-off though.
(\*):
```rs
#![feature(const_trait_impl, effects, generic_const_exprs)]
fn compute<T: const Trait>() -> Type<{ T::generate() }> { /*…*/ }
struct Store<T: const Trait>
where
Type<{ T::generate() }>:,
{
field: Type<{ T::generate() }>,
}
```
Lastly, “always const” trait bounds are a perfect fit for `generic_const_items`.
```rs
#![feature(const_trait_impl, effects, generic_const_items)]
const DEFAULT<T: const Default>: T = T::default();
```
Previously, we (oli, fee1-dead and I) wanted to reinterpret `~const Trait` as `const Trait` in generic const items which would've been quite surprising and not very generalizable.
Supersedes #117530.
---
cc `@oli-obk`
As discussed
r? fee1-dead (or compiler)
Diffstat (limited to 'compiler/rustc_mir_transform/src/coverage/mod.rs')
0 files changed, 0 insertions, 0 deletions
