25 lines
467 B
Rust
25 lines
467 B
Rust
// run-pass
|
|
// Test that we use the elaborated predicates from traits
|
|
// to satisfy const evaluatable predicates.
|
|
#![feature(generic_const_exprs)]
|
|
#![allow(incomplete_features)]
|
|
use std::mem::size_of;
|
|
|
|
trait Foo: Sized
|
|
where
|
|
[(); size_of::<Self>()]: Sized,
|
|
{
|
|
}
|
|
|
|
impl Foo for u64 {}
|
|
impl Foo for u32 {}
|
|
|
|
fn foo<T: Foo>() -> [u8; size_of::<T>()] {
|
|
[0; size_of::<T>()]
|
|
}
|
|
|
|
fn main() {
|
|
assert_eq!(foo::<u32>(), [0; 4]);
|
|
assert_eq!(foo::<u64>(), [0; 8]);
|
|
}
|