about summary refs log tree commit diff
path: root/compiler/rustc_mir_transform/src/coverage/mod.rs
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2023-12-27 19:24:31 +0000
committerbors <bors@rust-lang.org>2023-12-27 19:24:31 +0000
commit88d69b72b4ccfd4e4b64451a7a5d9fd23d2249a3 (patch)
treeee06621ba34b79cf6fb813a928424d9450fc8ed9 /compiler/rustc_mir_transform/src/coverage/mod.rs
parenta861c8965eaff66901710cc384a59f6b0b1a7700 (diff)
parent3eb48a35c8ae8335da66dc2bdb4f60e6ae22e1dd (diff)
downloadrust-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