mirror of
https://github.com/rust-lang/rust.git
synced 2026-06-03 00:57:35 +03:00
39 lines
794 B
Rust
39 lines
794 B
Rust
//@ run-pass
|
|
#![feature(min_generic_const_args, adt_const_params)]
|
|
#![expect(incomplete_features)]
|
|
|
|
use std::marker::ConstParamTy;
|
|
|
|
#[derive(Debug, Eq, PartialEq, ConstParamTy)]
|
|
struct Inner(u32);
|
|
|
|
#[derive(Debug, Eq, PartialEq, ConstParamTy)]
|
|
struct Outer(Inner);
|
|
|
|
#[derive(Debug, Eq, PartialEq, ConstParamTy)]
|
|
enum Container<T> {
|
|
Wrap(T),
|
|
}
|
|
|
|
fn with_outer<const O: Outer>() -> Outer {
|
|
O
|
|
}
|
|
|
|
fn with_container<const C: Container<Inner>>() -> Container<Inner> {
|
|
C
|
|
}
|
|
|
|
fn test<const N: u32>() {
|
|
with_outer::<{ Outer(Inner(N)) }>();
|
|
with_outer::<{ Outer(Inner(const { 42 })) }>();
|
|
|
|
with_container::<{ Container::Wrap::<Inner>(Inner(N)) }>();
|
|
}
|
|
|
|
fn main() {
|
|
test::<5>();
|
|
|
|
let o = with_outer::<{ Outer(Inner(const { 10 })) }>();
|
|
assert_eq!(o, Outer(Inner(10)));
|
|
}
|