| //@ build-pass | |
| #![allow(incomplete_features)] | |
| #![feature(generic_const_exprs)] | |
| trait TraitOne { | |
| const MY_NUM: usize; | |
| type MyErr: std::fmt::Debug; | |
| fn do_one_stuff(arr: [u8; Self::MY_NUM]) -> Result<(), Self::MyErr>; | |
| } | |
| trait TraitTwo { | |
| fn do_two_stuff(); | |
| } | |
| impl<O: TraitOne> TraitTwo for O | |
| where | |
| [(); Self::MY_NUM]:, | |
| { | |
| fn do_two_stuff() { | |
| O::do_one_stuff([5; Self::MY_NUM]).unwrap() | |
| } | |
| } | |
| struct Blargotron; | |
| #[derive(Debug)] | |
| struct ErrTy<const N: usize>([(); N]); | |
| impl TraitOne for Blargotron { | |
| const MY_NUM: usize = 3; | |
| type MyErr = ErrTy<{ Self::MY_NUM }>; | |
| fn do_one_stuff(_arr: [u8; Self::MY_NUM]) -> Result<(), Self::MyErr> { | |
| Ok(()) | |
| } | |
| } | |
| fn main() { | |
| Blargotron::do_two_stuff(); | |
| } |